#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Person
{//抽象类提供接口
public:
virtual Person *Clone() = 0;//返回基类指针
virtual void printT() = 0;
};
class JavaProgrammer : public Person
{
private:
string m_name;
int m_age;
char *m_resume;
public:
JavaProgrammer()//无参构造函数
{
this->m_name = "";
this->m_age = 0;
m_resume = NULL;
}
JavaProgrammer(string name, int age)//有参构造函数
{
this->m_name = name;
this->m_age = age;
m_resume = NULL;
}
~JavaProgrammer()
{
if (m_resume != NULL)
{
free(m_resume);
m_resume = NULL;
}
}
virtual Person *Clone()//实现自我复制功能
{
JavaProgrammer *p = new JavaProgrammer;
*p = *this;//在这里只是简单赋值操作,没有遇到深拷贝 和 浅拷贝的问题
return p;
}
void setResume(char *resume)
{
m_resume = new char[strlen(resume) + 1]; //因为是字符串末尾多一个'\0'
strcpy(m_resume, resume);
}
virtual void printT()
{
cout << "m_name:" <<  m_name << "\t" << "m_age:" << m_age << endl;
if (m_resume != NULL)
{
cout << m_resume << endl;
}
}
};
void main()
{
JavaProgrammer javaperson1("李四", 160);
javaperson1.setResume("我是C++程序员");//字符串操作,使用函数完成初始化操作。注意字符串操作的时候要进行'\0''
//如果不使用这个函数进行封装,那么就会出现深拷贝和浅拷贝的问题
//如果没有这个函数,那么在指针自我拷贝的时候吗,我们就要把内存给创建出来,然后在去进行赋值操作
javaperson1.printT();//自己打印自己的信息
Person *p2 = javaperson1.Clone();  //对象具有自我复制功能 注意深拷贝和浅拷贝问题
p2->printT();
delete p2;
system("pause");

}

思路来源:  传智博客---王保明

设计模式----原型模式(C++实现)相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  6. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  7. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  8. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  9. [设计模式]原型模式

    简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...

  10. Java设计模式——原型模式

    概述 原型模式是为了解决一些不必要的对象创建过程.当Java JDK中提供了Cloneable接口之后,原型模式就变得异常的简单了.虽然由于Cloneable的引入使用程序变得更简单了,不过还是有一些 ...

最新文章

  1. 为ThinkPad T420增加一根4G内存
  2. 是否可以在Gradle中声明一个可用于Java的变量?
  3. 安装TensorRT,然后导入uff库包的时候报错:ImportError: ERROR: Failed to import module(cannot import name ‘GraphDef`)
  4. 基于计算机的控制系统,基于计算机的机械控制系统实现方式研究.pdf
  5. MATLAB编辑GUI界面
  6. 基于概率的项目相似度之并行方法
  7. 不做别人思想的“跑马场”(人民论坛)
  8. apollo配置中心搭建
  9. span width无效
  10. 西门子Step7安装和入门初步
  11. 【数据挖掘算法】(一)MSET 算法
  12. 基于三星6.0.1的Xposed模块安装以及模拟位置的安装
  13. 百度笔试题--论坛数据库表设计
  14. 智能家庭本周锋闻:小米终于还是做了空气净化器
  15. 核只有单位元等价于映射是单射
  16. Excel如何筛选数据重复项?
  17. BitComet(比特彗星)64位 V1.57
  18. 量子计算基础(学习笔记)
  19. cpm自动SEO写文章 关键词文本生成工具3.0版本
  20. 红外对管应该如何选择比较好

热门文章

  1. JSP — GET 与 POST 的区别
  2. Linux-shell编程_xargs命令详解
  3. 机械表小案例之transform的应用
  4. .NET / C# basic
  5. FormBorderStyle 枚举
  6. HCL之SSH的配置与应用
  7. 南昌工程学院计算机考试题库和答案,南昌工程学院 语试题答案.doc
  8. Linux之FTP服务、NFS服务、RPC服务及案例
  9. Mongoose的增删改查
  10. Netty 核心组件 Pipeline 源码分析(二)一个请求的 pipeline 之旅