需要使用初始化成员列表:
情况一、需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);
创建类对象时,需要对类的数据成员初始化,如果是类对象必须初始化,有父类也要初始化。
在分配内存时会调用父类的构造函数 。如果有默认无参构造函数,可以忽略
情况二、需要初始化const修饰的类成员或初始化引用成员数据;
情况三、子类初始化父类的私有成员;
被final修饰的类,class ** final,不能被继承
C++中虚析构函数的作用是为了避免内存泄漏,当派生类有指针成员变量的时候使用
class Derive : public Base
Base *pD = new Derive
1 对于全局变量和局部静态变量,如果没有初始化值,那么系统默认赋值为0。所以当这类变量的初始值要求为0,或者不关心初始值时,定义时不需要赋初值,这样可以提高效率。
2 对于局部变量,如果没有赋初值,那么默认为随机值,即什么值都有可能。
什么时候使用引用、什么时候使用指针(指针不用初始化,可以指向不同对象,引用要初始化,只能指向一个固定对象。指针需要额外的空间,引用不用,作为形参还需要实参副本)
一般的原则:
对于使用引用的值而不做修改的函数:
1)如果数据对象很小,如内置数据类型或者小型结构,则按照值传递
void func(int );
2)如果数据对象是数组,则使用指针(唯一的选择),并且指针声明为指向const的指针
void func(const int *,int);//第二个参数为数组长度
3)如果数据对象是较大的结构,则使用const指针或者引用,已提高程序的效率。这样可以节省结构所需的时间和空间
void func(const struc *); 或void func(const struc &);
4)如果数据对象是类对象,则使用const引用(传递类对象参数的标准方式是按照引用传递)
void func(const string &,);
对于修改函数中数据的函数:
1)如果数据是内置数据类型,则使用指针
-> int,long等普通数据类型
void func(int *);
2)如果数据对象是数组,则只能使用指针
void func(int *,int);//第二个参数为数组长度
3)如果数据对象是结构,则使用引用或者指针
void func(struc *); 或void func(struc &);
4)如果数据是类对象,则使用引用 -> string等对象也算
void func(ostream &);
构造函数带有explicit关键字,不能隐式转换。
隐式转换,构造函数为demo(double a),Demo d = 12.2,转换为Demo d = new Demo(12.2)
纯虚函数是虚函数再加上 = 0;
源文件->预处理(处理#开始的语句,宏&include)->编译(源转为汇编)->目标代码(二进制文件)->链接器->可执行文件