C++旅程第七站------菱形继承
本帖最后由 这是她 于 2020-5-17 20:32 编辑In order to be irreplaceable one must always be different.
菱形继承
菱形继承(钻石继承):
1、两个派生类继承同一个基类;
2、又有某个类同时继承两个派生类;
#include<iostream>
using namespace std;
//爷爷
class AAA
{
public:
int m_long;
};
//利用虚继承可以解决菱形继承问题----子类继承两份相同的数据,导致资源浪费
//继承前加virtual 关键字后,变成虚继承
//此时公共的父类AAA->成为虚基类
//父亲
class BBB : virtual public AAA {};
class CCC : virtual public AAA {};
//儿子
class DDD : public BBB, public CCC {};
void test1()
{
DDD p1;
p1.m_long = 100;//不加virtual之前,这条语句是不可以执行的---因为编译器他不知道这个成员属性是哪的
cout << "p1.m_long -> " << p1.m_long <<endl;
cout << "----------------------------------------------------------" << endl;
//菱形继承中,如果两个父类拥有相同的数据,使用作用域 :: 加以区分
p1.BBB::m_long = 1;
cout << "p1.BBB::m_long -> " << p1.BBB::m_long <<endl;
cout << "p1.m_long -> " << p1.m_long << endl;
//如果我们初始化了一个属性---那么这个属性无论谁调用都是最后更新的数据--------跟资源共享一样,大家都可以修改,保存最新数据
cout << "----------------------------------------------------------" << endl;
//下面这个例子也可以看出来,再用另一个类初始化属性,属性将变成最新数据
p1.CCC::m_long = 2;
cout << "p1.m_long -> " << p1.m_long << endl;
cout << "p1.BBB::m_long -> " << p1.BBB::m_long <<endl;
cout << "p1.CCC::m_long -> " << p1.CCC::m_long << endl;
}
int main()
{
test1();
return 0;
}
{:10_297:} 渣渣一个感谢各位大佬指教{:10_303:}
沙发{:10_256:}
页:
[1]