Maqi 对象
class Maqi {
public:
string name;
int age;
Maqi(string name, int age) : name(name), age(age) {}
string &getName() {
return this->name;
}
Maqi() {
cout << " Maqi()" << endl;
}
virtual ~Maqi() {
cout << " ~Maqi()" << endl;
}
Maqi(Maqi &maqi) {
name = maqi.name;
age = maqi.age;
}
};
调用
string *maqi = new string("maqi");
Maqi *maqis = new Maqi(*maqi, 18);
cout << "maqis->getName() = " << maqis->getName() << endl;
cout << "&maqis = " << &maqis << endl;
Maqi copyMaqi(*maqis);
cout << "copyMaqi.getName() = " << copyMaqi.getName() << endl;
cout << "copyMaqi = " << ©Maqi << endl;
cout << "==============================================" << endl;
Maqi changeMqi(copyMaqi);
cout << "changeMqi.change() = " << changeMqi.getName() << endl;
cout << "changeMqi = " << &changeMqi << endl;
cout << "==============================================" << endl;
string *change = new string("change");
Maqi third = changeMqi;
third.name = *change;
cout << "third.change() = " << third.getName() << endl;
cout << "third = " << &third << endl;
cout << "changeMqi.change() = " << changeMqi.getName() << endl;
cout << "==============================================" << endl;
delete maqis;
总结:
1.对象的拷贝函数和复制 都是生成新的对象。
2.拷贝函数等同于 Maqi third = changeMqi; 即:
Maqi copyMaqi(*maqis);
等同于
Maqi third = changeMqi
3.但是如果重写 Maqi(Maqi &maqi)拷贝函数,其成员赋值将受其影响,比如删除 name = maqi.name;,将输出如下结果:也就是拷贝和复制都会走拷贝函数。
maqis->getName() = maqi
&maqis = 0x28fd98
copyMaqi.getName() =
copyMaqi = 0x28fd78
==============================================
changeMqi.change() =
changeMqi = 0x28fd58
==============================================
third.change() = change
third = 0x28fd38
changeMqi.change() =
==============================================