思想:使对象克隆自身,返回一个匿名对象,对匿名对象进行修改,不会影响原对象。
//注:下面代码使用了抽象类,然也可以使用不同的继承。
# include <iostream>
using namespace std;
//抽象原型
class AbsPrototype
{
public:
virtual AbsPrototype* Clone() = 0; //克隆
virtual void show() = 0; //展示
};
//具体原型
class Prototype : public AbsPrototype {
public:
Prototype(int a) : a_(a) {}
//拷贝构造器
Prototype(Prototype &obj) {
this->a_ = obj.a_;
}
//克隆
virtual AbsPrototype* Clone() {
return new Prototype(*this);
}
//展示
virtual void show() {
cout << a_ << endl;
}
private:
int a_;
};
int main()
{
Prototype a(10);
a.show();
AbsPrototype *b = a.Clone();
b->show();
}