继承是面向对象的三大特性之一。子类:继承方式 父类
一、继承方式
1、公共继承
2、保护继承
3、私有继承
继承过来后,成员属性的变化,变化后要注意实例化对象是否能访问:
父类的私有成员,子类都访问不了,但是都隐藏继承到子类的对象上;公共继承父类除私有成员其它成员在子类中访问权限不变;其它继承方式继承父类除去私有成员其它成员访问权限变成与继承方式一样。
二、继承中的对象模型
继承过来的成员,哪些属于子类的对象:不管什么继承方式都在子类的对象上,父类的私有成员只是被编译器隐藏了,但是还是在子类的对象上
利用开发人员命令提示工具可以看到单个对象的布局:
三、继承中构造和析构函数的调用顺序
先调用父类构造,再子类构造,然后就是子类析构,父类析构。
四、继承中同名的成员处理方式
同名成员属性:
1、访问子类中该同名成员,直接调用就好
2、调用父类中该同名成员,加作用域调用
同名的成员函数:
如果子类中出现了和父类同名的成员函数,子类的同名成员会隐藏掉父类所有同名成员函数(包括重载)
想访问到父类中被隐藏的同名成员函数,需要加作用域。
五、继承静态成员的处理方式
复习回忆一下静态成员属性和静态成员函数的特点
1、静态同名,与上述处理方式相同
2、注意:但是可以通过类名访问静态成员:
六、多继承语法
c++允许一个类继承多个父类
1、语法:class 子类:继承方式 父类1,继承方式 父类2......
多继承会引发父类中有同名成员的出现,需要加作用域区分。实际开发中不建议使用多继承。
七、菱形继承问题及解决办法
但是我们最终的数据只用要一份,因此需要用虚继承解决这个问题。此时的共同父类叫做虚基类。是因为这样通过虚基类指针指向虚基类表