继承的好处: 减少重复代码
语法: class 子类 : 继承方式 父类
子类 也称为 派生类
父类 也称为 基类
派生类中的成员,包含两大部分:
一类是从基类继承过来的,一类是自己增加的成员
从基类继承过来的表现为共性,而新增加的体现了其个性。
继承方式
继承语法:class 子类 :继承方式 父类
继承方式一共有三种:
公共继承
保护继承
私有继承
继承中的对象模型
结论: 父类中的私有成员也是被子类继承下去的,只是编译器给隐藏后访问不到
利用工具查看:
继承中的构造和析构顺序
继承中:
先调用父类构造函数
在调用子类构造函数
先析构子类构造函数
最后析构父类构造函数
析构顺序与构造顺序相反
继承同名成员处理方式
当子类中出现与父类同名的成员,如何通过子类对象,访问到子类或父类的同名数据
访问子类同名成员:直接访问即可
访问父类同名成员: 需要加作用域
总结:
同名静态成员的处理方式和非静态是一样的,只不过有两种访问方式(通过对象和通过类名)
多继承语法
C++允许一个类继承多个类
语法: class 子类 :继承方式 父类1,继承方式 父类2 ...
多继承可能会引发父类中有同名成员出现,需要加作用域区分
总结:多继承中父类出现了同名情况,子类使用时候要加作用域。
C++实际开发中不建议使用多继承
菱形继承
菱形继承概念:
两个派生类继承同一个基类(父类)
又有某个类同时继承两个派生类
这种继承被称为菱形继承,或者钻石继承
利用虚继承,可以解决菱形继承的问题 virtual关键字
在继承之前 加上关键字 virtual 变成虚继承
总结:菱形继承带来的问题是子类继承两份相同的数据,导致资源浪费以及毫无意义
利用虚继承(指针偏移)可以解决继承问题。