1)多态:允许将子类类型的指针赋值给父类类型的指针。赋值以后,父类对象可以根据当前赋值给它的子类对象的特性以不同的方式运作。
2)深拷贝:重新分配内存;浅拷贝:共用同一内存。
3)友元:非成员函数不能通过类的对象访问私有成员,但是友元(函数)可以;友元函数却不是成员函数,但必须在类中声明;类与类之间的友元关系不能被继承。
非成员函数不能是虚的,所以友元函数也不能是虚的。
4)复制构造函数与赋值:有新对象被定义则调用复制构造,没有则调用赋值。函数之间的值传递时,会隐式定义新对象,所以会调用复制构造函数
5)构造函数与析构函数:派生类不能继承父类的构造和析构函数,要定义自己的构造和析构函数。子类定义构造函数时,可以选择显式调用父类的构造函数(如果父类只有有参构造函数,则子类必须显式调用)
执行顺序:父类构造函数、子类构造函数、子类析构函数、父类析构函数
将构造/析构函数设置为protected则无法直接创建该类。
构造函数的调用顺序为:调用基类的构造函数->调用成员对象的构造函数->调用自身的构造函数。
构造函数的调用次序完全不受构造函数初始化列表的表达式中的次序影响,与基类的声明次序和成员对象在函数中的声明次序有关
6)变量的初始化顺序:1)基类的静态变量或全局变量;2)派生类的的静态变量或全局变量;3)基类的成员变量;4)派生类的成员变量
7)空类默认产生的成员函数:1)默认构造函数;2)复制构造函数;3)析构函数;4)赋值运算符重载函数;5)取址运算符重载函数、const取址运算符重载函数
8)继承:派生类的性质=min(基类性质,继承性质);私有成员不能访问。
9)默认参数:1)既有声明又有定义时,只允许在声明中使用默认参数;2)默认参数应该从右至左定义(不允许跳);3)默认参数调用的调用顺序是从左至右;4)默认参数可以全局变量(常量)、函数
10)初始化列表A::A:a(0),b(1){}
1)赋值是删除原值,赋予新值;初始化列表开辟空间和初始化是同时完成,直接给予一个值。
2)只能用初始化列表不能用赋值的情况:1、类中含有const、reference成员常量;2、基类的构造函数;3、成员类型是没有默认构造函数的类