C++Note 运算符重载 赋值
赋值运算符重载
C++编译器至少给一个类添加4个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数,对属性进行值拷贝
4.赋值运算符 operator= ,对属性进行值拷贝(可能有深浅拷贝问题)
如果类中属性指向堆区(程序员自己开辟释放管理的区域),做赋值操作时也会出现深浅拷贝的问题
1 #include <iostream> 2 using namespace std; 3 //赋值运算符重载 4 class Person 5 { 6 public: 7 Person(int age) 8 { 9 m_Age = new int(age); 10 } 11 ~Person() 12 { 13 if (m_Age != NULL) 14 { 15 delete m_Age; 16 m_Age = NULL; 17 } 18 } 19 Person& operator=(Person& p)//返回值为空 不能实现 连续等于 例 c=b=a; 20 { 21 //m_Age = p.m_Age;//编译器提供的浅拷贝 22 //应该先判断是否有属性在堆区 如果有先释放干净 然后再深拷贝 23 if (m_Age != NULL) 24 { 25 delete m_Age; 26 m_Age = NULL; 27 } 28 m_Age = new int(*p.m_Age);//深拷贝操作 29 return *this;//实现连续赋值 30 } 31 int* m_Age; 32 }; 33 void test() 34 { 35 Person p1(18); 36 Person p2(20); 37 Person p3(21); 38 p2 = p1;//赋值 深浅拷贝问题 39 p3 = p2 = p1;//连续赋值 40 cout << "p1的年龄:" << *p1.m_Age << endl; 41 cout << "p2的年龄:" << *p3.m_Age << endl; 42 } 43 int main() 44 { 45 test(); 46 system("pause"); 47 return 0; 48 }
浙公网安备 33010602011771号