一、继承的方式
- 公共继承
- 保护继承
- 私有继承
父类中所有的非静态成员属性都会被子类继承,私有的成员属性也是,只是被编译器隐藏了。
二、继承中构造和析构的顺序
子类继承父类后,当创建子类对象,也会调用父类的构造函数
继承中先调用父类的构造函数,再调用子类的构造函数,析构顺序与构造相反
三、继承中出现的同名成员
1.同名成员属性
访问子类中的成员属性,直接访问即可,访问父类中的同名成员属性,需要加一个作用域
2.同名成员函数
访问子类中的成员函数,直接访问即可,访问父类中的同名成员函数,需要加一个作用域
但是需要注意:如果子类中出现和父类中同名的成员函数,子类的同名成员会隐藏掉父类中的所有同名的函数,包含重载,不能直接访问,想要访问,就得加作用域。
四、继承同名静态成员处理方式
静态成员和非静态成员出现同名,处理方式一致
- 访问子类同名成员 直接访问即可
- 访问父类同名成员 需要加作用域访问
静态的成员通过对象来访问,但也可以通过类名来访问
五、多继承
语法:class 子类: 继承方式 父类1, 继承方式 父类2, .....,继承方式 父类n
多继承可能会引起父类中有同名成员出现,需要加作用域区分
c++实际开发中不建议用多继承
六、菱形继承
定义:两个派生类继承同一个基类,又有某个类同时继承了这两个派生类,这种继承称为菱形继承,或者钻石继承。
问题:当菱形继承,两个父类拥有相同数据,需要加作用域区分
问题:继承了相同的数据,可利用虚函数,解决此问题,在继承之前,加上关键字virtual,最大的类叫虚基类