#include<iostream>
#include<string>
using namespace std;
class Person {
public:
Person(){}
Person(string name,int age){
m_name = new string(name);
m_age = age;
}
Person(Person& p);
Person& operator=(Person& p);
string get_name() {return *(this->m_name);}
int get_age() {return m_age;}
void chg_age(int& age) {this->m_age = age;}
void chg_name(string& s) {*(this->m_name) = s;}
void showP();
~Person() {
cout << "析构函数调用" << endl;
if (m_name != NULL) {
delete m_name;
m_name = NULL;
}
}
private:
string* m_name=NULL;
int m_age=0;
};
Person& Person::operator=(Person& p) {
cout << "重载=" << endl;
if (this == &p) { return *this; }
if (!this->m_name) {
delete this->m_name;
this->m_name = NULL;
}
this->m_name = new string(*(p.m_name));
this->m_age = p.m_age;
return *this;
}
Person::Person(Person& p) {
cout << "重载拷贝构造" << endl;
this->m_name = new string(*(p.m_name));
this->m_age = p.m_age;
}
void Person::showP() {
cout << "姓名:" << *(this->m_name) << " 年龄:" << this->m_age << endl;
}
void test01() {
Person p1("孙悟空", 999);
p1.showP();
Person p2(p1);
p2.showP();
Person p3 = p1;
p3.showP();
}
int main() {
test01();
return 0;
}