2017.9.19

派生类成员的标识与访问


同名覆盖原则


当派生类与基类中有相同成员时:

若未强行指名,则通过派生类对象使用的是派生类中的同名成员。

如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。


多重继承


class 派生类名:继承方式1  基类名1,继承方式2  基类名2,...

{

成员声明;

}

注意:每一个“继承方式”,只用于限制对紧随其后之基类的继承


多继承时的构造函数


派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数)

{

本类成员初始化赋值语句;

};


二义性问题


在多重继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)——采用虚函数或同名覆盖原则来解决。

当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义性——采用虚基类来解决。


虚基类


虚基类的引入

用于有共同基类的场合

声明

以virtual修饰说明基类�例:class B1:virtual public B

作用

主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题.

为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝

注意:

在第一级继承时就要将共同基类设计为虚基类。


虚基类及其派生类构造函数


建立对象时所指定的类称为最(远)派生类。

虚基类的成员是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的。

在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中给出对虚基类的构造函数的调用。如果未列出,则表示调用该虚基类的缺省构造函数。

在建立对象时,只有最派生类的构造函数调用虚基类的构造函数,该派生类的其它基类对虚基类构造函数的调用被忽略。

你可能感兴趣的:(2017.9.19)