第四节 · 遗产分配 · 访问控制与派生类作用域

C++ 支持多重继承:一个类可以从多个基类继承。这是强大但复杂的特性。


基本多重继承

class Flyable
{
public:
    void fly()
    {
        cout << "Flying in the sky" << endl;
    }
};

class Swimmable
{
public:
    void swim()
    {
        cout << "Swimming in water" << endl;
    }
};

// 鸭子既能飞又能游
class Duck : public Flyable, public Swimmable
{
public:
    void quack()
    {
        cout << "Quack quack!" << endl;
    }
};

int main()
{
    Duck d;
    d.fly();    // 继承自 Flyable
    d.swim();   // 继承自 Swimmable
    d.quack();  // 自己的方法
    
    return 0;
}

名称冲突


菱形继承问题


虚继承解决菱形问题


虚继承的构造函数


接口继承模式

多重继承最常用于实现多个接口:


混入(Mixin)模式


何时使用多重继承

推荐使用:

  • 实现多个接口

  • Mixin 模式

  • 组合不相关的功能

避免使用:

  • 继承多个有状态的类

  • 存在方法名冲突

  • 导致复杂的菱形继承


替代方案:组合


习题

  • 解释虚继承是如何解决菱形问题的。

  • 实现一个使用多重继承的游戏角色系统。

  • 比较多重继承和组合的优缺点。

Last updated