zoukankan      html  css  js  c++  java
  • 大话设计模式-原型模式

    原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    原型模式其实就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节。

    浅拷贝和深拷贝:

    浅拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

    深拷贝:被拷贝对象的所有变量都含有与原来对象相同的值,把引用对象的变量指向复制过的新对象,而不是原来的被引用对象。

     1 // Clone.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <string>
     6 #include <iostream>
     7 
     8 using namespace std;
     9 
    10 class WorkExperience{
    11 public:
    12 void setData(string data){
    13         this->data = data;
    14     }
    15     string getData(){
    16         return this->data;
    17     }
    18     void setCom(string com){
    19         this->com = com;
    20     }
    21     string getCom(){
    22         return com;
    23     }
    24 private:
    25     string data;
    26     string com;
    27 };
    28 class Resume{
    29 
    30 public:
    31     Resume(string name){
    32         this->name = name;
    33         work = new WorkExperience();
    34     }
    35     Resume(WorkExperience *work){
    36         this->work = work;
    37     }
    38     void setPersonInfo(string sex,int age){
    39         this->age = age;
    40         this->sex = sex;
    41     }
    42     void setWorkEx(string data,string com){
    43         work->setData(data);
    44         work->setCom(com);
    45     }
    46     void Display(){
    47 
    48         cout<<"name= "<<name<<"  ";
    49         cout<<"sex= "<<sex<<"  ";
    50         cout<<"age= "<<age<<endl;
    51         cout<<"工作经历: data="<< work->getData() << " 公司 "<<work->getCom()<<endl;
    52     }
    53     void *Clone(){
    54         Resume *obj = new Resume(this->work);
    55         obj->sex = this->sex;
    56         obj->name = this->name;
    57         obj->age = this->age;
    58         return obj;
    59     }
    60 private: 
    61     string name;
    62     string sex;
    63     int age;
    64     WorkExperience *work;
    65 
    66     
    67 };
    68 int _tmain(int argc, _TCHAR* argv[])
    69 {
    70     Resume *a = new Resume("zjx");
    71     a->setPersonInfo("",27);
    72     a->setWorkEx("2018","11");
    73     a->Display();
    74 
    75     Resume *b=(Resume*)a->Clone();
    76     b->setWorkEx("2001","22");
    77     b->Display();
    78     return 0;
    79 }
  • 相关阅读:
    JavaScript教程——JavaScript 的基本语法(标识符)
    ECMAScript 6 入门——ES6 声明变量的六种方法
    JavaScript教程——数据类型概述
    对称机密算法与非对称机密算法
    C语言提高 (2) 第二天 用指针对字符串进行操作
    C语言提高 (1) 第一天 数据类型本质与内存四区
    关于内存地址和内存空间的理解(转)
    为什么对数组处理的函数需要传递数组长度
    Unicode编码,解释UCS、UTF、BMP、BOM等名词
    上海
  • 原文地址:https://www.cnblogs.com/zhangjxblog/p/8885745.html
Copyright © 2011-2022 走看看