我们知道,Java或Android使用JNI可以实现与C或C++代码的交互,这在开发需要进行TCP或UDP通讯的java或android应用时显得尤为重要。Java或Android要调用JNI(Native)方法,需要先将封装好JNI接口的C或C++代码编译成动态函数共享库(我们通常以so作为其后缀),然后调用 System.loadLibrary方法将该so文件加载到Java或Android的运行环境去。编译该so文件很简单,Java加载的so文件直接使用gcc编译即可;Android加载的so则需要使用Android NDK内的ndk-build来编译。 阅读全文
一、CppTest简介
CppTest 是一个简单、轻便的 C++ 单元测试框架,它具有实用性与可扩展性,支持多种输出格式,添加新的测试用例极其方便。CppTest 最大的优点是容易理解、便于掌握和使用。 阅读全文
对于 Linux 跟 Unix 系统而言,make 是一个极其重要的编译命令,我们在开发项目或者安装应用软件时,经常要用到 make 或 make install,对于一个包含几十、几百甚至成千上万个源文件的项目,如果每次都要键入 gcc 或 g++ 等命令来进行编译的话,那对于程序员简直就是一场噩梦,而使用 make 和 makefile 工具便可以简洁明了地理顺各个源文件之间纷繁复杂的相互关系,将大型项目分解成多个更易于管理的模块,自动完成编译工作,并且可以只对程序员上次编译后修改过的部分进行编译。
因此,有效的利用 make 和 makefile 工具可以大大提高程序开发的效率。同时也极大地减轻了 Linux 下应用程序安装的难度。接下来,就让我们来详细了解一下 make 及其描述文件 makefile。 阅读全文
一、SSL基本原理
加密和解密使用同一个密钥的算法,称为对称加密算法;加密和解密使用不同密钥的算法,称为非对称加密算法。
对称加密算法通信双方都需要密钥,此密钥一旦被第三方窃取,通信过程将毫无隐私可言。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、抛出指针通常是个坏主意,抛出指针要求在对用处理代码存在的任意地方存在指针所指向的对象。
2、不能不处理异常。异常是足够重要的、使程序不能继续正常执行的事件。如果找不到匹配的catch,程序就调用库函数terminate。
3、如果catch(…)与其他catch子句结合使用,它必须是最后一个,否则,任何跟在它后面的catch子句都将不能匹配。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、在C++中,模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。
2、模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。
3、函数模板可以用与非模板函数一样的方式声明为inline。说明符放在模板形参表之后、返回类型之前,而不能放在关键词template之前。 阅读全文
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操作数的函数对象。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、重载操作符(即运算符重载)是具有特殊名称的函数,保留字operator后接需要定义的操作符符号。
2、除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针)与操作符的操作数目相同。函数调用操作符可以接受任意数目的操作数。
3、不能用过连接其他合法符号来创建任何新的操作符。例如,试图定义一个operator**操作符以提供供求幂操作是非法的。 阅读全文