多继承 概念 : 一个 子类 ( 派生类 ) 可以 继承 多个 父类 ( 派生类 ) ;
只有 C++ 语言有多继承概念 , 别的语言没有该概念 ;
多继承语法 :
class 子类名称 : 访问控制关键字 父类名称1, 访问控制关键字 父类名称2, ... 访问控制关键字 父类名称n
{
// 子类内容
}
调用多个父类构造函数 : 如果一个 子类 ( 派生类 ) 继承多个 父类 ( 基类 ) , 使用 初始化列表 调用 多个 父类 的构造函数 初始化 子类继承自父类的 成员变量 ;
class Child : public Parent1, public Parent2
{
public:
Child(int x, int y, int z): Parent1(x), Parent2(y)
{
this->c = z;
}
}
多个父类构造函数调用顺序 : 多个父类 的 构造函数 的 执行顺序 , 与 定义子类时 指定的 父类顺序有关 ;
子类 可能 继承多个 父类 , 父类 也有可能还有 父类 ,
也就是说 子类 可能需要 访问 父类的成员 , 爷爷类 的成员 ,
如果 访问 的 父类 / 爷爷类 的 成员
父类 :: 成员变量名
或 爷爷类 :: 成员变量名
进行访问 ;在下面的代码中 , Child 子类 继承 Parent1 和 Parent2 父类 , 可以使用 Parent1::a
访问 父类1 中的成员变量 , 使用 Parent2::b
访问 父类2 中的成员变量 ;
代码示例 :
#include "iostream"
using namespace std;
class Parent1 {
public:
int a;
};
class Parent2 {
public:
int b;
};
class Child : public Parent1, public Parent2
{
public:
void print()
{
// 类内部访问父类成员
cout << "Parent1::a = " << Parent1::a << " , Parent2::b = " << Parent2::b << endl;
}
};
int main() {
Child child;
// 打印初始状态的值
child.print();
child.a = 10;
child.b = 20;
child.print();
child.Parent1::a = 30;
child.Parent2::b = 40;
child.print();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
Parent1::a = -858993460 , Parent2::b = -858993460
Parent1::a = 10 , Parent2::b = 20
Parent1::a = 30 , Parent2::b = 40
Press any key to continue . . .
多继承中 , 子类的构造函数中 , 需要在 函数初始化列表 中 调用 父类的 初始化函数 , 对 继承自 父类的 成员变量 进行初始化操作 ;
代码示例 :
#include "iostream"
using namespace std;
class Parent1 {
public:
Parent1(int x)
{
this->a = x;
}
public:
int a;
};
class Parent2 {
public:
Parent2(int x)
{
this->b = x;
}
public:
int b;
};
class Child : public Parent1, public Parent2
{
public:
Child(int x, int y, int z): Parent1(x), Parent2(y)
{
this->c = z;
}
public:
void print()
{
cout << "a = " << a << " , b = " << b << " , c = " << c << endl;
}
public:
int c;
};
int main() {
Child child(1, 2, 3);
// 打印初始状态的值
child.print();
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
a = 1 , b = 2 , c = 3
Press any key to continue . . .