////////////////// // MT1Q3.cpp #include #include class B { public: void say(const std::string& msg) const { std::cout << "\n " << msg; } B() { say("B default ctor"); } B(const B& b) { say("B copy ctor"); } virtual ~B() {} B& operator=(const B& b) { say("B assignment"); if(&b == this) return *this; // no state to assign return *this; } }; class D : public B { public: D() : B(), _i(0) { say("D default ctor"); } D(const D& d) : B(d), _i(d._i) { say("D copy ctor"); } D& operator=(const D& d) { say("D assignment"); if(&d == this) return *this; B::operator=(d); _i = d._i; } private: int _i; }; B* f(const D& d) { d.say("f(const D& d)"); return new D(d); } void main() { D d; B b = *f(d); std::cout << "\n\n"; }