首页 > 学院 > 开发设计 > 正文

多重继承与虚基类

2019-11-10 17:18:18
字体:
来源:转载
供稿:网友

当继承多个基,且这多个基有相同祖先时,多重继承会出现问题。

假设如下关系:

Worker--> Singer/Waiter-->SingingWaiter

虚基类使得从多个类(它们基类相同)派生出的对象只继承一个基类对象。例如,通过在类声明中使用virtual,可以使Worker被用作Singer和Waiter的虚基类(virtual和public次序无关紧要):

class Singer : virtual public Worker {..};

class Waiter : publicvirtual Worker {..};

然后将SingerWaiter类声明为:

class SingerWaiter : public Singer, public Waiter {..};

现在SingerWaiter对象只包含Worker对象的一个副本。从本质上说,继承的Singer和Waiter对象共享一个Worker对象,而不是各自引入自己的Worker副本,这样访问SingerWaiter中的Worker的成员就不会有二义性。

于是乎,以上的关系变为:Worker是Singer和Waiter的虚基类,是SingerWaiter的间接虚基类。

使用虚基类有一些需要修改的代码。

首先,需要对类构造函数采用新的方法。当基类是虚的时,禁止信息通过中间类自动传递给基类。即:有间接虚基类的派生类包含直接调用间接基类构造函数的构造函数,这对于间接非虚类来说是非法的。如果类有间接虚基类,则除非只需使用该虚基类的默认构造函数,否则必须显式地调用该虚基类的某个构造函数。

其次,通过作用域解析运算符或者重新定义方法澄清编程者的意图。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表