06-7 继承语法-多继承语法
在之前我们学习过了 c++中的基本继承语法,我们可以复习一下。
-
复习:
c++中,类与对象的继承语法是:
class 子类名 :继承方式 父类
其中,有三种继承方式,对应着 c++中类内对象的三种权限:
- 公共继承(
public
) - 保护继承(
protected
) - 私有继承(
private
)
- 公共继承(
在 c++中,允许一个类继承多个类。
语法:class 子类 :继承方式 父类1, 继承方式 父类2 ...
多继承中可能会出现父类中的同名成员,需要添加作用域用于区分。
请注意:在 c++实际开发环境下不建议使用多继承的方式继承类。
那么我们来仔细看一下:
-
一个类继承多个类
在 c++中,一个类可以继承多个类,语法是:
class 子类 :继承方式 父类1, 继承方式 父类2 ...
#include
#include using namespace std; class Base_A { public: string A = "这是类 Base_A 的成员属性 A 。"; void Func_A() { cout << "这是类 Base_A 的成员函数 Func_A 。" << endl; } }; class Base_B { public: string B = "这是类 Base_B 的成员属性 B 。"; void Func_B() { cout << "这是类 Base_B 的成员函数 Func_B 。" << endl; } }; class Son_C :public Base_A, public Base_B { public: string C = "这是类 Son_C 的成员属性 C 。"; void Func_C() { cout << "这是类 Son_C 的成员函数 Func_C 。" << endl; } }; int main() { class Son_C c; cout << c.A << endl; cout << c.B << endl; cout << c.C << endl; c.Func_A(); c.Func_B(); c.Func_C(); return 0; } 运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
这是类 Base_A 的成员属性 A 。 这是类 Base_B 的成员属性 B 。 这是类 Son_C 的成员属性 C 。 这是类 Base_A 的成员函数 Func_A 。 这是类 Base_B 的成员函数 Func_B 。 这是类 Son_C 的成员函数 Func_C 。
可以看到,在这里,我们声明了三个类,分别是
Base_A
、Base_B
和Son_C
。其中,Son_C
使用公共继承(public
)的方式继承了Base_A
和Base_B
。这时候,我们创建一个
Son_C
的对象c
,用对象c
可以成功访问和调用到继承自Base_A
和Base_B
成员属性和成员函数。 -
多继承中可能会出现父类中的同名成员
由于多继承中可能会出现父类中的同名成员,所以在 c++实际开发环境下不建议使用多继承的方式继承类。
但是,如果遇到了,可以使用添加作用域的方式来访问或调用父类中同名的成员属性和成员函数。
#include
#include using namespace std; class Base_A { public: string hhh = "这是类 Base_A 的成员属性 hhh 。"; void Func_hhh() { cout << "这是类 Base_A 的成员函数 Func_hhh 。" << endl; } }; class Base_B { public: string hhh = "这是类 Base_B 的成员属性 hhh 。"; void Func_hhh() { cout << "这是类 Base_B 的成员函数 Func_hhh 。" << endl; } }; class Son_C :public Base_A, public Base_B { public: string C = "这是类 Son_C 的成员属性 C 。"; void Func_C() { cout << "这是类 Son_C 的成员函数 Func_C 。" << endl; } }; int main() { class Son_C c; cout << c.Base_A::hhh << endl; cout << c.Base_B::hhh << endl; cout << c.C << endl; c.Base_A::Func_hhh(); c.Base_B::Func_hhh(); c.Func_C(); return 0; } 在这里,我们只是对代码进行了稍微修改。我们声明了三个类,分别是
Base_A
、Base_B
和Son_C
。其中,Son_C
使用公共继承(public
)的方式继承了Base_A
和Base_B
。我们把被继承的
Base_A
和Base_B
的成员函数和成员属性的变量名修改了。成员属性的变量名修改为了:hhh
,而成员函数的函数名修改为了:Func_hhh
。之后我们访问或调用的时候,就需要加上需要调用的父类的作用域区分了,比如上面所示的
c.Base_A::hhh
、c.Base_B::hhh
、c.Base_A::Func_hhh();
和c.Base_B::Func_hhh();
。
- 总结:
- c++中,允许一个类继承多个类,语法是:
class 子类 :继承方式 父类1, 继承方式 父类2 ...
- 多继承中如果出现父类中的同名成员,需要添加作用域用于区分。
- 在 c++实际开发环境下不建议使用多继承的方式继承类。
- c++中,允许一个类继承多个类,语法是:
:-)