C++实现原型模式(复制简历)

  • Post author:
  • Post category:其他



本代码实现了大话设计模式上复制简历;


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 版权协议,转载请附上原文出处链接和本声明。