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