#ifndef MT4Q4_H #define MT4Q4_H /////////////////////////////////////////////////////////////// // MT4Q4.h - What does this code do? // // // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 2012 // /////////////////////////////////////////////////////////////// #include #include class B { public: B(const std::string& s="") : str(s) {} virtual ~B() { std::cout << "\n ~B() called"; } virtual void say() { std::cout << "\n B: my string is: \"" << str << "\""; } std::string& getStr() { return str; } private: std::string str; }; class D : public B { public: D(const std::string& s = "") : B(s) {} virtual ~D() { std::cout << "\n ~D() called"; } virtual void say() { std::cout << "\n D: my string is: \"" << getStr() << "\""; } }; inline B someFunction_Type1() { return B("from someFunction"); } inline B someFunction_Type2() { return D("from SomeFunction"); } inline B& someFunction_Type3() { return *new B("from someFunction"); } inline B& someFunction_Type4() { return *new D("from SomeFunction"); } #endif