图片.png
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Person {
public:
virtual Person* Clone() = 0;
virtual void print() = 0;
};
class CPPProgramer :public Person {
public:
CPPProgramer() {
this->name = "";
this->age = 0;
this->resume = NULL;
}
CPPProgramer(string name,int age) {
this->name = name;
this->age = age;
this->resume = NULL;
}
~CPPProgramer() {
if (resume != NULL) {
free(resume);
resume = NULL;
}
}
virtual CPPProgramer* Clone() {
CPPProgramer* p = new CPPProgramer;
p->age = this->age;
p->name = this->name;
if (this->resume != NULL) {
p->resume = new char[strlen(this->resume) + 1];
strcpy(p->resume, this->resume);
}
//*p = *this;
return p;
}
void setResume(const char* resume) {
this->resume = new char[strlen(resume) + 1];
strcpy(this->resume, resume);
}
virtual void print() {
cout << "name=" << name << " age =" << age << endl;
if (resume != NULL) {
cout << "resume:"<<resume << endl;
}
}
private:
string name;
int age;
char* resume;
};
void main() {
CPPProgramer p("张三", 23);
p.setResume("c++程序员");
CPPProgramer* p2 = p.Clone();
p2->print();
delete p2;
system("pause");
}
网友评论