到目前为止,所有的例子的继承我们已提出的单继承,继承的类,每个有且只有一个父。然而,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;
}
|