本代码实现了大话设计模式上复制简历;
1.克隆对象比直接创建对象的优点在于,克隆是将原有对象的行为属性带到了新的对象中。
2.C++没有克隆方法,要克隆一个对象,需要借助拷贝构造函数来实现。拷贝构造函数中实现拷贝对象有浅拷贝和深拷贝:
浅拷贝是指对象复制时,只是对于对象中的数据成员进行值拷贝;深拷贝是指对象赋值时,对于对象的简单数据成员进行值拷贝,对于对象中的动态成员(堆或者其他系统资源),要重新分配动态空间。
当类不定义拷贝构造函数的时候,编译器会自动生一个构造函数,叫做默认拷贝构造函数。默认拷贝构造函数使用浅拷贝方式。如果类中含有动态数据成员,就必须使用深拷贝方式实现拷贝构造函数,否则,在销毁对象时,两个对象的析构函数将对同一个内存空间释放两次,产生运行时错误。
代码:
class Experience
{
public:
string timeArea;
string company;
void WorkExperience(string timeArea, string company)
{
this->timeArea = timeArea;
this->company = company;
}
};
class Resume
{
private:
string name;
string sex;
string age;
//string timeArea;
//string company;
public:
Experience *WorkExperience;
Resume(string name)
{
this->name = name;
WorkExperience = new Experience();
}
Resume(const Resume&C)
{
WorkExperience = new Experience();
*WorkExperience = *WorkExperience;
this->sex = C.sex;
this->age = C.age;
this->name = C.name;
}
void SetPersonalInfo(string sex, string age)
{
this->sex = sex;
this->age = age;
}
void SetWorkExperience(string timeArea, string company)
{
WorkExperience->WorkExperience(timeArea, company);
//this->timeArea = timeArea;
//this->company = company;
}
void Display()
{
cout<<name<<" "<<sex<<" "<<age;
cout<<endl;
cout<<"工作经历:"<<WorkExperience->timeArea<<" "<<WorkExperience->company;
cout<<endl;
}
};
int main(void)
{
Resume A("Rambo");
A.SetPersonalInfo("M", "18");
A.SetWorkExperience("2013","SQL");
Resume B(A);
B.SetWorkExperience("2014","C++");
A.Display();
B.Display();
getchar();
return 0;
}
版权声明:本文为u012071200原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。