C++基础知识之"多继承"

fengjingtu

多继承的应用

多继承概念

一个类有多个直接基类的继承关系称为多继承

多继承声明语法

1
2
3
4
class  派生类名 : 访问控制  基类名1, 访问控制  基类名2 ,  … , 访问控制  基类名n
{
*数据成员和成员函数声明*
};

类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加自己的成员

多继承的派生类构造和访问

多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员

执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。

一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include<iostream>
using namespace std;
//多继承被摒弃了
//一个类可以继承于多个父类

class E
{
public:
E(int a)
{
this->a = a;
}
void printE()
{
cout << "E::a=" << a << endl;
}
void Seta(int a)
{
this->a = a;
cout << "E::a=" << a << endl;
}
private:
int a;
};
class F
{
private:
int a;
public:
F(int a)
{
this->a = a;
}
~F()
{

}
void printF()
{
cout << "F::a=" << a << endl;
}
void Seta(int a)
{
this->a = a;
cout << "F::a=" << a << endl;
}
};
class G:public E,public F
{
private:
int c;
public:
G(int a,int a2,int c):E(a),F(a2)
{
this->c = c;
}
void printG()
{
cout << "G::c=" << c << endl;
}

};
void multi_inherit_test()
{
G g(1, 2, 3);
g.printE();
g.printF();
g.printG();
g.E::Seta(10);//g.Seta(10)访问不明确
g.printE();
g.printF();
g.printG();

}
int main_multi_inherit_test()
{
multi_inherit_test();
cout<<"hello world"<<endl;
system("pause");
return 0;
}