继承语法
class 子类 : 继承方式 父类
继承方式
继承中的对象模型
父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到
使用工具验证
1、在开始菜单找到VS的开发人员命令提示符
2、跳转到当前源码所在文件夹
3、通过命令查看对象模型
cl /d1 reportSingleClassLayout查看的类名 所属文件名
继承中构造和析构顺序
继承中先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反
继承同名成员处理方式
当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?
- 访问子类同名成员 直接访问即可
- 访问父类同名成员 需要加作用域
总结
- 子类对象可以直接访问到子类中同名成员
- 子类对象加作用域可以访问到父类同名成员
- 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数
- 静态成员变量与静态成员函数类似
多继承
语法
class 子类 :继承方式 父类1 , 继承方式 父类2...
多继承可能会引发父类中有同名成员出现,需要加作用域区分
C++实际开发中不建议用多继承
菱形继承
概念:
两个派生类继承同一个基类
又有某个类同时继承者两个派生类
这种继承被称为菱形继承,或者钻石继承
总结:
- 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义
- 利用虚继承可以解决菱形继承问题
虚继承
语法
class 子类 : virtual 继承方式 父类
解决了菱形继承的问题