// Solution. Now enforcing use of particular A constructors in the D constructor. #include #include using namespace std; class A { public: int a; A(): a(9){} A(int a): a(a){} }; class B : public virtual A { public: int b; B(): A(5), b(1){} }; class C : public virtual A { public: int c; C(): A(7), c(2){} }; class D : public B, public C { public: int d; D(): C(), B(), A(8), d(9){} // Notice the initialization of the virtual A object part here: A(8). }; int f(D &x){ cout << x.a << endl; // 8 // The A(int) constructor is forced in the D-constructor. cout << x.B::a << endl; // 8 // See page 634-635 of The C++ Programming Language (4ed). 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); }