C++ UML图:
代码:
#pragma once
#include <iostream>
#include <string>
class Resume
{
protected:
std::string name;
public:
Resume() {}
virtual ~Resume() {}
virtual Resume* Clone() { return NULL; }
virtual void Set(std::string name) {}
virtual void Show() {}
};
#pragma once
#include "Resume.h"
class ResumeA : public Resume
{
public:
ResumeA(const std::string str); //构造函数
ResumeA(const ResumeA &r); //拷贝构造函数
~ResumeA(); //析构函数
ResumeA* Clone(); //克隆,关键所在
void Show(); //显示内容
};
ResumeA::ResumeA(const std::string str)
{
if( str.empty() )
{
name = "";
}
else {
name = str;
}
}
ResumeA::~ResumeA()
{
}
ResumeA::ResumeA(const ResumeA &r)
{
name = r.name;
}
ResumeA* ResumeA::Clone()
{
return new ResumeA(*this);
}
void ResumeA::Show() {
std::cout << "ResumeA name : "<< name << std::endl;
}
#pragma once
#include "Resume.h"
#include "ResumeA.h"
int main()
{
Resume *r1 = new ResumeA("A");
Resume *r2 = r1->Clone();
r1->Show(); r2->Show();
//删除r1,r2
delete r1; delete r2;
r1 = r2 = NULL;
system("pause");
}
浅拷贝与深拷贝: