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 }
复制代码

 

posted on   廿陆  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示