利用原型模式实现简历复印 C++
2016-03-17 11:40
423 查看
说下对原型模式的理解:
原型模式是指用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。
本质就是从一个对象创建另一个可定制的对象, 并且还不需要知道任何创建的细节信息。
这个感觉, 好像没什么新的东西, 和C++自带的拷贝构造和拷贝赋值函数非常类似, 只不过自带的两个函数都是浅拷贝, 而这个原型模式一般要求是深拷贝。
因为比较简单, 也就没有画UML图了
运行效果图:
直接上代码:
resume.h
main.cpp
原型模式是指用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。
本质就是从一个对象创建另一个可定制的对象, 并且还不需要知道任何创建的细节信息。
这个感觉, 好像没什么新的东西, 和C++自带的拷贝构造和拷贝赋值函数非常类似, 只不过自带的两个函数都是浅拷贝, 而这个原型模式一般要求是深拷贝。
因为比较简单, 也就没有画UML图了
运行效果图:
直接上代码:
resume.h
#ifndef _RESUME_H_ #define _RESUME_H_ #include <string> #include <memory> #include <iostream> using std::string; using std::shared_ptr; using std::cout; using std::endl; /************************************************************************/ /* 工作经历 */ /************************************************************************/ class CExperence{ public: string WorkDate() const { return workDate; } void WorkDate(string val) { workDate = val; } string Company() const { return company; } void Company(string val) { company = val; } private: string workDate; string company; }; /************************************************************************/ /* 简历 */ /************************************************************************/ class CResume{ public: CResume(string name) : name(name), experence(new CExperence){} void setPersonInfo(string sex, string age){ this->sex = sex; this->age = age; } void setWorkExperience(string workDate, string company){ experence->WorkDate(workDate); experence->Company(company); } void display(){ cout << name << " " << sex << " " << age << "\nWorking experences:\t" << experence->WorkDate() << " " << experence->Company() << endl; } // 默认浅拷贝, 实现深拷贝 CResume clone(){ CResume tmp(name); tmp.setPersonInfo(sex, age); shared_ptr<CExperence> exp(new CExperence); tmp.experence = exp; tmp.setWorkExperience(experence->WorkDate(), experence->Company()); return tmp; } private: string name; string sex; string age; shared_ptr<CExperence> experence; }; #endif // _RESUME_H_
main.cpp
#include "resume.h" #include <iostream> using namespace std; int main(){ CResume a("lisi"); a.setPersonInfo("man", "26"); a.setWorkExperience("1998-2000", "XX company"); CResume b = a; b.setWorkExperience("1998-2000", "YY company"); CResume c = a.clone(); c.setPersonInfo("female", "27"); c.setWorkExperience("1998-2000", "ZZ company"); a.display(); b.display(); c.display(); system("pause"); return 0; }
相关文章推荐
- 标准C++复数运算类详解及使用例程
- leetcode:235. Lowest Common Ancestor of a Binary Search Tree
- C++中一个常用的句型(两个for(;;)语句连用的重要性)
- 分糖果 蓝桥杯
- C++Coding那些事 之do...while(0)的妙用
- C++sort()函数的用法 及学习
- 顺序线性表的实现
- C语言数据类型,运算符与表达式
- c++跨平台计数器
- 大话C++----默认参数及其所引起的二义性
- 大话C++----关于类的那些基础事
- C++实验2-两数差的绝对值
- gvim配置文件for C/C++
- C++实验1-数字加减
- C++ String类
- C语言中的位移运算
- Compilers: Principles for C/C++ with .c & .h
- C++类模板的三种特化
- C/C++程序的内存分配方式
- c++ template