作为开发者,我们深有体会,不管是进行什么开发,为了部署开发环境,我们往往需要折腾很长时间、查阅很多资料才能完成,而且这次折腾完了,下次到了另一台新电脑上又得重新来过,整个部署过程记得还好,要是不记得又得重新开始,而且遇到Android这种GFW阻隔了开发资源下载链接的环境部署,又尤其浪费时间。所以这也是我写下这篇教程的初衷跟动力源泉,希望大家参考了这篇教程以后可以轻轻松松在Mac系统下将Android环境部署好。 阅读全文
一、CppTest简介
CppTest 是一个简单、轻便的 C++ 单元测试框架,它具有实用性与可扩展性,支持多种输出格式,添加新的测试用例极其方便。CppTest 最大的优点是容易理解、便于掌握和使用。 阅读全文
对于 Linux 跟 Unix 系统而言,make 是一个极其重要的编译命令,我们在开发项目或者安装应用软件时,经常要用到 make 或 make install,对于一个包含几十、几百甚至成千上万个源文件的项目,如果每次都要键入 gcc 或 g++ 等命令来进行编译的话,那对于程序员简直就是一场噩梦,而使用 make 和 makefile 工具便可以简洁明了地理顺各个源文件之间纷繁复杂的相互关系,将大型项目分解成多个更易于管理的模块,自动完成编译工作,并且可以只对程序员上次编译后修改过的部分进行编译。
因此,有效的利用 make 和 makefile 工具可以大大提高程序开发的效率。同时也极大地减轻了 Linux 下应用程序安装的难度。接下来,就让我们来详细了解一下 make 及其描述文件 makefile。 阅读全文
程序编写完毕以后,可能或多或少会存在一些问题,为了解决这些问题,我们就需要对程序进行调试。最基本最明了的调试办法通常是使用 printf 函数在关心的代码位置打印关心的信息,但是出于代码简洁性的考虑,我们只会在必要的位置加上 printf 打印语句,这样就可能忽略很多潜在的问题,为了找出这些潜在的问题,我们需要用到调试器。 阅读全文
libsmtp–是一个开源的C语言动态库,与其想对应,libsmtp++采用C++开发。libsmtp–使得开发人员能够直接在程序内部实现SMTP邮件发送,它的主要特点是短小精炼、易于使用,已在Linux上测试通过,它支持给多个收件人同时发送统一内容的邮件,并且支持抄送以及密送。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、在C++中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。
2、模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。
3、函数模板可以用与非模板函数一样的方式声明为inline。说明符放在模板形参表之后、返回类型之前,而不能放在关键词template之前。 阅读全文
CppLive编程在线创建于今年五一,建站第一周被Google收录,第一周被百度收录,第一个月内陆续被腾讯搜搜、网易有道、Yahoo收录,第二个月顺利申请到Google Adsense。建博以来,基本上坚持每天一篇原创更新,Wordpress主题一直未曾改变,能够被各大搜索引擎(尤其是谷歌跟百度)及时收录,只有十月初的时候出于SEO的考虑,更改过文章的固定链接格式,将以前的文章做过302重定向,那时候百度第一次将CppLive编程在线拔光。 阅读全文
1、在基类和派生类中使用同一个名字的成员函数,其行为与数据成员一样:在派生类作用域中派生类成员将屏蔽基类成员。即使使用函数原型不同,基类成员也会被屏蔽。
2、局部作用域中声明的函数不会重载全局作用域中定义的函数,同样,派生类中定义的函数也不会重载基类中定义的成员。通过派生类对象调用函数时,实参必须与派生类中定义的版本相匹配,只有在派生类根本没有定义该函数时,才考虑基类函数。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、面向对象编程的关键思想是多态性。
2、在C++中,基类必须指出希望派生类重定义哪些函数,定义为virtual的函数是基类期望派生类重新定义的,基类期望派生类继承的函数不能定义为虚函数。
3、在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
2、同时定义前缀式操作符和后缀式操作符存在一个问题:它们的形参数目和类型相同,普通重载不能区别所定义的是前缀式操作符还是后缀式操作符。为了解决这个问题,后缀式操作符函数接受一个额外的(即无用的)int型形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。
3、如果cpplive是一个vector<string>对象,以下代码:
sort(cpplive.begin(), cpplive.end(), greater<string>());
将按降序对vector进行排序。第三个参数用于传递比较元素的谓词函数。该实参是greater<string>类型的临时对象,是一个将>操作符用于两个string操作数的函数对象。 阅读全文