name = new char[strlen(str)+1];
strcpy(name, str);
}
}
ResumeA::~ResumeA() { delete [] name;}
ResumeA::ResumeA(const ResumeA &r) {
name = new char[strlen(r.name)+1];
strcpy(name, r.name);
}
ResumeA* ResumeA::clone() {
return new ResumeA(*this);
}
void ResumeA::show() {
cout<<"ResumeA name : "<
ResumeB::ResumeB(const char *str)
{
if(str == NULL) {
name = new char[1];
name[0] = '\0';
}
else {
name = new char[strlen(str)+1];
strcpy(name, str); www.2cto.com
}
}
ResumeB::~ResumeB() { delete [] name;}
ResumeB::ResumeB(const ResumeB &r) {
name = new char[strlen(r.name)+1];
strcpy(name, r.name);
}
ResumeB* ResumeB::clone() {
return new ResumeB(*this);
}
void ResumeB::show() {
cout<<"ResumeB name : "<
int main()
{
resume *r1 = new ResumeA("A");
resume *r2 = new ResumeB("B");
resume *r3 = r1->clone();
resume *r4 = r2->clone();
r1->show();
r2->show();
//删除r1,r2
delete r1;
delete r2;
r1 = r2 = NULL;
//深拷贝所以对r3,r4无影响
r3->show();
r4->show();
delete r3; delete r4;
r3 = r4 = NULL;
}
其实这个设计模式比较简单,我们总结一下具体操作步骤。
1、声明一个抽象基类,并定义clone()函数为纯虚函数。
2、实例化各个子类,并且实现复制构造函数,并实现clone()函数
摘自 lbqBraveheart的专栏