抽象类
纯虚函数,虚函数后面加 = 0
含有至少一个纯虚函数的类称之为抽象类
抽象类不能实例化对象
纯虚函数声明不能含有函数体,函数体可以放在类外
纯虚析构函数必须有函数体
如果子类没有重写父类的纯虚函数,子类仍然是个抽象类
应用 规范化派生类的接口,和某些不适合生成对象的父类
Override和final
Override
如果子类重写了父类的虚函数,可以使用override来说明
Override不能用于一般的成员函数和子类自己的虚函数
Final
不允许子类重写父类函数
多重继承
语法
子类会继承所以父类的数据和成员函数
内存
先父类后子类
父类的内存排序顺序受继承顺序的影响
指针转换
当子类对象赋给父类指针的时候,会自动转换为父类位于子类内存中的首地址
This指针也会发生类似的转换
菱形继承
子类有两份基类的数据
虚继承解决菱形继承的问题
虚继承中,虚基类的数据只有一份放在对象的末尾
构造析构的顺序
先构造父类后构造子类
构造顺序受继承顺序影响
析构的顺序与构造相反
构造析构的顺序
先构造虚基类,在构造中间父类,最后构造子类
跟构造的顺序相反