56 lines
922 B
C++
56 lines
922 B
C++
|
// = 赋值重载
|
||
|
// 注意 = 重载时,可能会调用类本身的拷贝构造函数。如果左值是没有创建的对象时,
|
||
|
// 会调用类的拷贝构造函数
|
||
|
#include <iostream>
|
||
|
#include <cstring>
|
||
|
#include <cstdlib>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
class A
|
||
|
{
|
||
|
private:
|
||
|
int x;
|
||
|
|
||
|
public:
|
||
|
A(int x) : x(x)
|
||
|
{
|
||
|
cout << "A(int x)" << endl;
|
||
|
}
|
||
|
A(const A &obj)
|
||
|
{
|
||
|
cout << "A(A &obj)" << endl;
|
||
|
this->x = obj.x;
|
||
|
}
|
||
|
A &operator=(const A &other)
|
||
|
{
|
||
|
cout << "A &operator=(A&other)" << endl;
|
||
|
this->x = other.x;
|
||
|
return *this;
|
||
|
}
|
||
|
|
||
|
public:
|
||
|
void show()
|
||
|
{
|
||
|
cout << "x = " << x << endl;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
A a1(100), a2(200);
|
||
|
A a4 = 300; // A(300)
|
||
|
a4 = 400; // operator=()
|
||
|
|
||
|
A a3 = a1; // A(a1)
|
||
|
a3.show();
|
||
|
|
||
|
a3 = a2; // operator=() 调用赋值重载函数
|
||
|
a3.show();
|
||
|
|
||
|
a3 = a4;
|
||
|
a3.show();
|
||
|
|
||
|
return 0;
|
||
|
}
|