派生类的构成

(1)吸收基类的成员:不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收(继承方式)。
(2)改造基类成员:声明一个和某基类成员同名的新成员,该新成员将屏蔽基类同名成员。称为同名覆盖(override) 重定义
(3)发展新成员:派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。
(4)重写构造函数与析构函数

虚基类


  • virtual <继承方式><基类名>
  • 解决菱形继承,多继承的二义性
  • 使用虚继承,使公共基类在其派生对象中产生一个基类子对象

继承机制


派生类的成员函数和友元函数可以访问基类的所有公有和保护的 数据成员和成员函数
派生类对象只能访问基类的公有数据成员和成员函数,多重继承(两种二义性)

派生类成员的访问属性


在讨论访问属性时,要考虑以下几种情况:
(1)、基类的成员函数访问基类成员。
(2)、派生类的成员函数访问派生类自己增加的成员。
对于第(1)和第(2)种情况,比较简单,基类的成员函数可以访问基类成员,派生类的成员函数可以访问派生类成员。私有数据成员只能被同一类中的成员函数访问,公用成员可以被外界访问。

(3)、基类的成员函数访问派生类的成员。
第(3)种情况也比较明确,基类的成员函数只能访问基类的成员,而不能访问派生类的成员

(5)、在派生类外访问派生类的成员。
第(5)种情况也比较明确,在派生类外可以访问派生类的公用成员,而不能访问派生类的私有成员

(4)、派生类的成员函数访问基类的成员。
(6)、在派生类外访问基类的成员。
不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。简单来说分为以(下几种:

公用继承(public inheritance)
基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有(保持不变)。

私有继承(private inheritance)
基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有(全是私有)。

受保护的继承(protected inheritance)
基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。保护成员的意思是,不能被外界引用,但可以被派生类的成员引用(五五分开)。

派生类对象的内存空间

image.png