/* 虚继承(Virtual Inheritance) 为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。 在继承方式前面加上 virtual 关键字就是虚继承 1. 必须在虚派生的真实需求出现前就已经完成虚派生的操作。在示例中,当定义 D 类时才出现了对虚派生的需求, 但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。换个角度讲,虚派生只影响 从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身。 */
#include<iostream> usingnamespace std;
// 间接基类A classA { protected: int _a; public: voidfunc(){ cout << "this is AAAA" << endl; } };
// 直接基类B classB : virtualpublic A { protected: int _b; };
// 直接基类C classC : virtualpublic A { protected: int _c; };
classD : public B, public C { public: voidsetA(int a){_a = a;} voidsetB(int b){_b = b;} voidsetC(int c){_c = c;} };
intmain(void){ D d; d.setA(5); d.func(); return0; }
/* ================== this is AAAA ================== */