前言
本文只是记录本人学习设计模式时记录的一些学习笔记,可能不全,但是可以做到一些提醒记忆的作用,如有侵权,联系删改,文章后会贴出学习时参考的链接。此前言适用于本人所写设计模式系列。
原型
将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例
复制一个对象分为浅拷贝和深拷贝:
- 浅拷贝: 给对象中的每个成员变量进行复制,就是把A1类中的变量直接赋给A2类中变量,属于值传递,但是涉及到有new之类内存分配的地方,他们却是共享内存的。[默认]
- 深拷贝: 不仅使用值传递,而是要每个变量都有自己一份独立的内存空间,互不干扰。
#include <iostream>
using namespace std;
class Person{
public:
virtual Person* clone() = 0;
virtual void printT() = 0;
};
class CPlusPlusProgrammer : public Person{
public:
// CPlusPlusProgrammer()
// {
// m_name = "";
// m_age = 0;
// }
CPlusPlusProgrammer(string name, int age)
{
m_name = name;
m_age = age;
}
virtual Person* clone(){
return new CPlusPlusProgrammer(*this);
// CPlusPlusProgrammer *tmp = new CPlusPlusProgrammer;
tmp->m_name = this->m_name;
tmp->m_age = this->m_age;
// *tmp = *this;
// return tmp;
}
virtual void printT(){
cout << "name:" << m_name << "\nage:" << m_age << endl;
}
private:
string m_name;
int m_age;
};
int main()
{
Person* c1 = new CPlusPlusProgrammer("zhangsan",22);
c1->printT();
Person* c2 = c1->clone();
c2->printT();
return 0;
}