基础:
1、类型转换可能发生的情况:
单自变量构造函数;
隐式转换操作符;
2、前置、后置类型操作符:
区别:后置类型操作符会产生临时对象以表示操作之前的值,前置直接返回原对象。
重载:重载后置类型操作符需要加一个无用的形参以区别前置类型操作符(int)。
3、编译器隐式类型转换以匹配函数形参和返回值一般只进行一次,不会对一个值进行多次转换
4、真假表达式:骤死式,从左向右遇到false即停止
重载&&、||、, 是危险的,因为重载函数不会符合骤死式的行为模式。
5、new操作符、new operator和placement new
异常:
1、异常应该按引用传值
2、完成构造的对象才会被析构
构造函数内异常与析构函数异常。
效率:
1、临时对象的来源:
隐式类型转换;
函数返回对象时;
2、返回值优化:
3、x+=y 与 x= x+y的区别:x+y要多产生一个临时对象
4、RTTI的代价以及实现方法:
代价:遍历虚函数表
实现方法:在虚函数表内设置指向类的typeinfo的指针
技术:
1、限制构造函数的作用:
限制对象的产生;
限制类被派生;
2、限制析构函数的作用:
限制栈对象产生
3、私有化operator new
限制堆对象产生
3、将构造函数和非成员函数虚化
所谓虚化就是根据不同上下文产生出派生体系中不同的对象
4、尽量不要提供隐式转换操作符
5、代理类
例如使用代理类区分operator []是读还是写
6、如何自行构建虚函数表以实现特殊虚函数功能
例如:根据一个以上对象类型决定调用那个虚函数
杂项:
1、将非尾端类设计为抽象类
2、c++与c的结合
函数声明 extern "C"
内存分配 内存分配函数不能混用
数据结构兼容 不使用虚函数,struct以及内建类型都能兼容
c++全局对象和静态对象 main函数应尽量写到c++的代码里,因为它会附带有初始化全局和静态变量的功能