设计模式——原型模式(C++实现)

 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<< "	pstTypeA.m_strName "<< pstTypeA->m_strName<< endl;
59         cout<< "pstTypeB.m_iAge: "<< pstTypeB->m_iAge<< "	pstTypeB.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
原文地址:https://www.cnblogs.com/070412-zwc/p/6809682.html