zoukankan      html  css  js  c++  java
  • 设计模式——原型模式(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
  • 相关阅读:
    磁盘分区,fdisk,gdisk,开机自动挂载,swap分区,修复文件系统,备份文件
    进程脱离窗口运行,僵尸、孤儿进程
    top命令、kill命令
    进程状态
    rpm包、挂载、yum命令
    DRF源码分析
    forms组件源码
    Django CBV源码分析
    魔法方法
    鸭子类型
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6809682.html
Copyright © 2011-2022 走看看