#include <iostream>
using namespace std;
class Base0 { //定义基类Base0
public:
int var0;
void fun0() { cout << "Member of Base0" << endl; }
};
class Base1: virtual public Base0 { //定义派生类Base1
public: //新增外部接口
int var1;
};
class Base2: virtual public Base0 { //定义派生类Base2
public: //新增外部接口
int var2;
};
class Derived: public Base1, public Base2 { //定义派生类Derived
public: //新增外部接口
int var;
void fun() { cout << "Member of Derived" << endl; }
};
int main() { //程序主函数
Derived d; //定义Derived类对象d
d.var0 = 2; //直接访问虚基类的数据成员
d.fun0(); //直接访问虚基类的函数成员
if(&d.Base1::var0==&d.Base2::var0)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}
- 在
main
函数中,创建了 Derived
类的对象 d
,然后将 var0
设置为 2
,并调用了 fun0
函数。这两个操作都是通过 Derived
类对象直接访问虚基类 Base0
的成员。 - 接着,程序检查
Base1
和 Base2
类的 var0
成员的地址是否相同。由于 Base1
和 Base2
都通过虚继承方式继承了 Base0
,它们会共享同一个 Base0
的子对象,因此它们的 var0
成员的地址应该是相同的。所以程序会输出 true
。