多继承与虚继承

多继承与虚继承

多继承

俗话讲的,鱼与熊掌不可兼得,而在计算机就可以实现,生成一种新的对象,
叫熊掌鱼,多继承自鱼和熊掌即可。还比如生活中,“兼”。

1620841315510

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

1620841334608

沙发床实现

1620841356908

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
#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;

//家具类
class Furniture
{
public:
int m; //材质
};
//如果子类虚继承本来, 编译器会将父类中的成员, 只拷贝一份。

//床类
class Bed: virtual public Furniture
{
public:
void sleep()
{
cout << "在床上睡觉" << endl;
}
};

//沙发类
class Sofa :virtual public Furniture
{
public:
void sit()
{
cout << "在沙发上睡觉" << endl;
}
};

//沙发床
class SofaBed :public Bed, public Sofa
{
public:
void sitAndSleep()
{
sit();//sofa
sleep();//bed
}
};

int main(void)
{
Bed b;
b.sleep();

cout << " ---- " << endl;

Sofa s; //m
s.m = 100;
s.sit();
cout << "------- " << endl;

SofaBed sb;
sb.sitAndSleep();

sb.m; //多继承如果


return 0;
}

虚继承

如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则
在对该基类中声明的名字进行访问时,可能产生二义性

1620841441584

1620841525168

1620841541994

1620841576400

1620841589330