// A1.cpp - implement derived copy constructor (also solution for A4) #include using namespace std; class A { public: A() : myCount(++numObjects) { cout << "\n void constructing A object"; }; A(const A &a) : myCount(++numObjects) { cout << "\n copy constructing A object"; }; void say(const char *msg) { cout << "\n I am A object #" << myCount << " " << msg; } private: int myCount; static int numObjects; }; int A::numObjects = 0; class B { public: B() { cout << "\n void constructing B object"; } B(const B &b) : a(b.a) { cout << "\n copy constructing B object"; } virtual void say(const char *msg) { cout << "\n I am a B object " << msg; a.say("called from B"); } private: A a; }; class D : public B { public: D() { cout << "\n void constructing D object"; } ////// start of complete answer ////////////////// D(const D &d) : B(d), a(d.a) { cout << "\n copy constructing D object"; } //// end of complete answer ////////////////////// void say() { cout << "\n I am a D object."; a.say("called from D"); B::say("called from D"); } private: A a; }; void main() { D d1; d1.say(); D d2 = d1; d2.say(); cout << "\n\n"; }