一、继承的方式

  1. 公共继承
  2. 保护继承
  3. 私有继承

继承_子类


父类中所有的非静态成员属性都会被子类继承,私有的成员属性也是,只是被编译器隐藏了。

继承_父类_02

二、继承中构造和析构的顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

继承中先调用父类的构造函数,再调用子类的构造函数,析构顺序与构造相反

继承_父类_03

三、继承中出现的同名成员

1.同名成员属性

访问子类中的成员属性,直接访问即可,访问父类中的同名成员属性,需要加一个作用域

继承_继承_04

2.同名成员函数

访问子类中的成员函数,直接访问即可,访问父类中的同名成员函数,需要加一个作用域

继承_子类_05

但是需要注意:如果子类中出现和父类中同名的成员函数,子类的同名成员会隐藏掉父类中的所有同名的函数,包含重载,不能直接访问,想要访问,就得加作用域。

四、继承同名静态成员处理方式

静态成员和非静态成员出现同名,处理方式一致

  • 访问子类同名成员 直接访问即可
  • 访问父类同名成员 需要加作用域访问

静态的成员通过对象来访问,但也可以通过类名来访问

五、多继承

语法:class 子类: 继承方式 父类1, 继承方式 父类2, .....,继承方式 父类n

多继承可能会引起父类中有同名成员出现,需要加作用域区分

c++实际开发中不建议用多继承

六、菱形继承

定义:两个派生类继承同一个基类,又有某个类同时继承了这两个派生类,这种继承称为菱形继承,或者钻石继承。

问题:当菱形继承,两个父类拥有相同数据,需要加作用域区分

问题:继承了相同的数据,可利用虚函数,解决此问题,在继承之前,加上关键字virtual,最大的类叫虚基类