#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
class Person
{//抽象类提供接口
public:
virtual Person *Clone() = 0;//返回基类指针
virtual void printT() = 0;
};
class JavaProgrammer : public Person
{
private:
string
m_name;
int
m_age;
char
*m_resume;
public:
JavaProgrammer()//无参构造函数
{
this->m_name = "";
this->m_age = 0;
m_resume = NULL;
}
JavaProgrammer(string name, int age)//有参构造函数
{
this->m_name = name;
this->m_age = age;
m_resume = NULL;
}
~JavaProgrammer()
{
if (m_resume != NULL)
{
free(m_resume);
m_resume = NULL;
}
}
virtual Person *Clone()//实现自我复制功能
{
JavaProgrammer *p = new JavaProgrammer;
*p = *this;//在这里只是简单赋值操作,没有遇到深拷贝 和 浅拷贝的问题
return p;
}
void setResume(char *resume)
{
m_resume = new char[strlen(resume) + 1]; //因为是字符串末尾多一个'\0'
strcpy(m_resume, resume);
}
virtual void printT()
{
cout << "m_name:" << m_name << "\t" << "m_age:" << m_age << endl;
if (m_resume != NULL)
{
cout << m_resume << endl;
}
}
};
void main()
{
JavaProgrammer javaperson1("李四", 160);
javaperson1.setResume("我是C++程序员");//字符串操作,使用函数完成初始化操作。注意字符串操作的时候要进行'\0''
//如果不使用这个函数进行封装,那么就会出现深拷贝和浅拷贝的问题
//如果没有这个函数,那么在指针自我拷贝的时候吗,我们就要把内存给创建出来,然后在去进行赋值操作
javaperson1.printT();//自己打印自己的信息
Person *p2 = javaperson1.Clone(); //对象具有自我复制功能 注意深拷贝和浅拷贝问题
p2->printT();
delete p2;
system("pause");
}
思路来源: 传智博客---王保明
转载请注明原文地址: https://ju.6miu.com/read-37265.html