• 设计模式——原型模式(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
  • 相关阅读:
    CF821E 【Okabe and El Psy Kongroo】
    BZOJ1231: [Usaco2008 Nov]mixup2 混乱的奶牛
    P1896 [SCOI2005]互不侵犯
    QBXT Day 2 记录
    CF467C George and Job
    【luogu P3373 线段树2】 模板
    【luogu P1306 斐波那契公约数】 题解
    【luogu T24743 [愚人节题目5]永世隔绝的理想乡】 题解
    【luogu P1903 [国家集训队]数颜色】 题解
    莫队算法~讲解
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6809682.html
Copyright © 2020-2023  润新知