多重继承

一、什么是多重继承

多继承/多重继承:

一个派生类可以有两个或多个基类(父类)。

多重继承在中小型项目中较少使用,在Java、C#等语言中直接取消多继承, 以避免复杂性.

二、多重继承的用法

将多个基类用逗号隔开.

实例:

例如已声明了类A、类B和类C,那么可以这样来声明派生类D:

class D: public A, private B, protected C{

    //类D自己新增加的成员

};

D 是多继承形式的派生类,

D 有3个父类(基类)

它以公有的方式继承 A 类,

以私有的方式继承 B 类,

以保护的方式继承 C 类。

D 根据不同的继承方式获取 A、B、C 中的成员.

三、多继承的构造函数

多继承形式下的构造函数和单继承形式基本相同.

以上面的 A、B、C、D 类为例,D 类构造函数的写法为:

D(形参列表): A(实参列表), B(实参列表), C(实参列表){

    //其他操作

}

多继承的构造函数的调用顺序

基类构造函数的调用顺序和和它们在派生类构造函数中出现的顺序无关,

而是和声明派生类时基类出现的顺序相同。

四、多重继承的弊端:二义性

在继承时,多个父类具有相同的成员函数,子类无法舍取继承哪一个父类的

解决多重继承的二义性的方法1:

    // 使用 "类名::" 进行指定, 指定调用从哪个基类继承的方法!

 wsc.Father::dance();

 wsc.Mother::dance();

// 解决多重继承的二义性的方法2:

// 在子类中重新实现这个同名方法, 并在这个方法内部, 使用基类名进行限定,来调用对应的基类方法

    wsc.dance();

posted @ 2020-06-02 09:35  CollisionDimension  阅读(993)  评论(0)    收藏  举报