/////////////////////////////////////////////////////////////// // cloneb.cpp - defines cloning // // Exam1:Q3 // // Jim Fawcett, CSE687 - Object Oriented Design, Spring 05 // /////////////////////////////////////////////////////////////// #include #include class clonable { public: virtual ~clonable() {} virtual clonable* clone() = 0; }; class cloningString : public std::string, public clonable { public: cloningString(const std::string& s) : std::string(s) {} virtual cloningString* clone() { return new cloningString(*this); } }; void main() { cloningString s = std::string("this is a cloning string"); std::cout << "\n " << s.c_str() << "\n size of string is: " << s.size() << " bytes\n"; cloningString* pClone = s.clone(); std::cout << "\n " << pClone->c_str() << "\n size of clone is: " << pClone->size() << " bytes\n"; delete pClone; std::cout << "\n\n"; }