// A2_7.cpp #include using namespace std; class A { protected: int x; public: A() { cout << "\n constructing A"; } }; class B { protected: int x; public: B() { cout << "\n constructing B"; } }; // C class fails to compile since mf() is ambiguous - which x? /* class C1 : public A, public B { public: void mf() { x; } }; */ // method #1 - removing ambiguity class C2 : public A, public B { public: C2() { cout << "\n constructing C2"; } void mf() { ++A::x; } }; /* method #2 - this doen't work class AD : public virtual A { }; class BD : public virtual B { }; class C5 : public AD, public BD { public: void mf() { ++x; } }; */ // method #3 - but this is ok class base { protected: int x; public: base() { cout << "\n constructing base"; } }; class AB : public virtual base { public: AB() { cout << "\n constructing AB"; } }; class BB : public virtual base { public: BB() { cout << "\n constructing BB"; } }; class C6 : public AB, public BB { public: C6() { cout << "\n constructing C6"; } void mf() { ++x; } }; void main() { C2 c2; c2.mf(); C6 c6; c6.mf(); cout << "\n\n"; }