// Illustration of virtual base classes. #include #include using namespace std; class A { public: int a; A(): a(8){} A(int a): a(11){} }; class B : public virtual A { public: int b; B(): b(1){} }; class C : public virtual A { public: int c; C(): c(2){} }; class D : public B, public C { public: int d; D(): d(9){} // use default constructors of B and C }; int f(D &x){ cout << x.a << endl; // 8 - not ambiguous, only one a in x. cout << x.B::a << endl; // 8 cout << x.C::a << endl; // 8 cout << x.b << endl; // 1 cout << x.c << endl; // 2 cout << x.d << endl; // 9 } int main(){ D d; f(d); }