在 C++ 中,多继承是一种允许一个类从多个父类中继承属性和方法的机制。
优点:多继承可以提供更灵活的代码组合和重用。
缺点:会增加代码的复杂度和难度,存在菱形继承问题。
C++ 中的多继承语法如下:
class Derived : access-specifier Base1, access-specifier Base2, ..., access-specifier BaseN {
// derived class implementation
};
其中,`Derived` 是派生类,`Base1`、`Base2`、...、`BaseN` 是基类,`access-specifier` 是访问控制修饰符,可以是 `public`、`protected` 或 `private`。
多继承中存在的菱形继承问题:如果一个子类从两个父类中继承了同一个基类,那么在访问该基类的成员时就会出现二义性。
解决方案:
1、C++ 中使用了虚继承,即在继承时声明基类为虚基类,这样将共同父类的数据成员与函数成员共享,避免了数据重复以及函数调用的二义性。
2、使用作用域解析运算符来明确调用哪个父类的方法。
解决方案2的代码示例:
#include <iostream>
using namespace std;
class Animal {
public:
void eat() {
cout << "Animal is eating." << endl;
}
};
class Bird : public Animal {
public:
void fly() {
cout << "Bird is flying." << endl;
}
};
class Fish : public Animal {
public:
void swim() {
cout << "Fish is swimming." << endl;
}
};
class Penguin : public Bird, public Fish {
public:
void slide() {
cout << "Penguin is sliding." << endl;
}
};
int main() {
Penguin penguin;
// penguin.eat(); // 二义性错误,需要指明调用的是哪个父类的方法
penguin.Bird::eat(); // 例如,指明调用Bird父类的eat()
penguin.Bird::fly();
penguin.Fish::swim();
penguin.slide();
return 0;
}