到目前为止,所有的例子的继承我们已提出的单继承,继承的类,每个有且只有一个父。然而,C++提供了做多重继承的能力。多重继承的派生类可以从多个父类继承的成员。
我们想写一个程序来追踪一群教师。老师是一个人。然而,老师也是员工(如果为自己工作的他们自己的雇主)。多重继承可以用来创建一个老师的类继承属性都人与员工。使用多重继承,只需指定每个基类(就像在单一继承),用逗号分隔。
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
|
#include
<string> class
Person { private : std::string
m_strName; int
m_nAge; bool
m_bIsMale; public : Person(std::string
strName, int
nAge, bool
bIsMale) :
m_strName(strName), m_nAge(nAge), m_bIsMale(bIsMale) { } std::string
GetName() { return
m_strName; } int
GetAge() { return
m_nAge; } bool
IsMale() { return
m_bIsMale; } }; class
Employee { private : std::string
m_strEmployer; double
m_dWage; public : Employee(std::string
strEmployer, double
dWage) :
m_strEmployer(strEmployer), m_dWage(dWage) { } std::string
GetEmployer() { return
m_strEmployer; } double
GetWage() { return
m_dWage; } }; //
Teacher publicly inherits Person and Employee class
Teacher: public
Person, public
Employee { private : int
m_nTeachesGrade; public : Teacher(std::string
strName, int
nAge, bool
bIsMale, std::string strEmployer, double
dWage, int
nTeachesGrade) :
Person(strName, nAge, bIsMale), Employee(strEmployer, dWage), m_nTeachesGrade(nTeachesGrade) { } }; |
在多重继承的问题
在多重继承,好像单继承的简单扩展,多重继承了很多问题,可明显提高了程序的复杂性,使他们一场噩梦。让我们来看看这些情况看。
首先,模糊,可当多个基类包含一个函数具有相同的名称。比如说呢。
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
|
class
USBDevice { private : long
m_lID; public : USBDevice( long
lID) :
m_lID(lID) { } long
GetID() { return
m_lID; } }; class
NetworkDevice { private : long
m_lID; public : NetworkDevice( long
lID) :
m_lID(lID) { } long
GetID() { return
m_lID; } }; class
WirelessAdaptor: public
USBDevice, public
NetworkDevice { public : WirelessAdaptor( long
lUSBID, long
lNetworkID) :
USBDevice(lUSBID), NetworkDevice(lNetworkID) { } }; int
main() { WirelessAdaptor
c54G(5442, 181742); cout
<< c54G.GetID(); //
Which GetID() do we call? return
0; } |