|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 这是她 于 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;
- }
复制代码
渣渣一个感谢各位大佬指教
|
|