多重继承:
定义:指子类继承父类,孙类继承子类,基类统称为父类,派生类为子类。
多重继承的子类包含所有父类的成员,除了构造函数和析构函数。
派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员。
- public派生:不修改基类的访问控制属性,protected成员可以在派生类的类内部查看,在外部不可以通过函数对象查看,private属性不可查看。
- protected派生:将低级属性更新为protected,派生成员函数可以访问protected成员,但是其对象和派生类对象不可以访问protectedprivate属性不改变。
- private派生:将所有属性修改为私有的,他的派生类不可查看其所有的成员。
当基类显示定义构造函数,在派生类的构造函数必须显示的调用基类的构造函数,且给够基类构造函数足够的参数。
-
构造函数的调用顺序:基类的构造函数-对象成员构造函数-派生类的构造函数。
-
析构函数的调用顺序:派生类析构函数-对象成员析构函数-基类的析构函数。
多继承:
定义:一个子类继承多个基类。
class 类名:继承方式 类名,继承方式 类名...
默认的继承是私有继承。
构造函数调用顺序:先调用所有基类的构造函数,在调用对象成员类构造函数,最后调用派生类的构造函数。
析构函数的调用顺序:与构造函数调用顺序相反。
处在同一层次的各基类构造函数的调用顺序取决于定义派生类时所指定的基类顺序,与派生类构造函数的初始化列表顺序无关。
虚拟继承和虚基类
问题:为了解决多继承中访问父类的同名函数的二义性问题。
1.显示的访问基类成员。
2.虚基类。
让在派生的对象成员在内存中只有一个副本。
虚基类只允许定义不带参数或者带默认参数的构造函数。如果多继承不涉及对同一基类的派生,就没有必要定义虚基类。