1 #include 2 #include 3 4 using namespace std; 5 6 class CPrototype 7 { 8 public: 9 CPrototype() 10 { 11 12 } 13 CPrototype(int iAge): m_iAge(iAge) 14... ...
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class CPrototype 7 { 8 public: 9 CPrototype() 10 { 11 12 } 13 CPrototype(int iAge): m_iAge(iAge) 14 { 15 16 } 17 virtual CPrototype* Clone() = 0; 18 19 int m_iAge; 20 }; 21 22 class CConcretePrototypeA: public CPrototype 23 { 24 public: 25 CConcretePrototypeA(int iAge, const string& strName):CPrototype(iAge), m_strName(strName) 26 { 27 28 } 29 30 // virtual CPrototype* Clone() 31 virtual CConcretePrototypeA* Clone() 32 { 33 return new CConcretePrototypeA(*this); 34 } 35 36 private: 37 CConcretePrototypeA(const CConcretePrototypeA& tmp) 38 { 39 this->m_iAge = tmp.m_iAge; 40 this->m_strName = tmp.m_strName; 41 } 42 43 public: 44 string m_strName; 45 }; 46 47 int main(int argc, char* argv[]) 48 { 49 // CPrototype* pstTypeA = new CConcretePrototypeA(30, "lisi"); 50 // CPrototype* pstTypeB = pstTypeA->Clone(); 51 52 CConcretePrototypeA* pstTypeA = new CConcretePrototypeA(30, "lisi"); 53 54 CConcretePrototypeA* pstTypeB = pstTypeA->Clone(); 55 pstTypeB->m_iAge = 40; 56 pstTypeB->m_strName = "zhangsan"; 57 58 cout<< "pstTypeA.m_iAge: "<< pstTypeA->m_iAge<< "\tpstTypeA.m_strName "<< pstTypeA->m_strName<< endl; 59 cout<< "pstTypeB.m_iAge: "<< pstTypeB->m_iAge<< "\tpstTypeB.m_strName "<< pstTypeB->m_strName<< endl; 60 61 delete pstTypeA; 62 delete pstTypeB; 63 64 return 0; 65 } 66 //////////////////////////////// 67 [root@ ~/learn_code/design_pattern/7_proto_type]$ ./protoType 68 pstTypeA.m_iAge: 30 pstTypeA.m_strName lisi 69 pstTypeB.m_iAge: 40 pstTypeB.m_strName zhangsan