C++ 类的成员函数的连续调用与返回值问题

一、返回值问题

复制代码
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class X
 6 {
 7 public:
 8     int a = 3;
 9     X set1(int b)
10     {
11         a = b;
12         return *this;
13     }
14 };
15 
16 int main()
17 {
18     X x;
19     x.set1(6);
20     cout << x.a;
21 
22     return 0;
23 }
复制代码

此处set1函数的返回值为X,而非X&,所以x.set1(6)返回的是x的一个副本,并非x对象本身,但是return之前的语句,即此处的a = b,仍是对x对象本身进行操作的(因为是对象x调用的此函数,即此处的a仍为x.a,因为a不可能是凭空拷贝出来的),只是返回值为x对象的副本而已,所以x.a的值仍然被修改为了6.

 

二、连续调用问题

(1)set1与set2的返回值是引用

复制代码
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class X
 6 {
 7 public:
 8     X display()
 9     {
10         cout << a;
11         return *this;
12     }
13     X& set1(int b)
14     {
15         a = b;
16         return *this;
17     }
18 
19     X& set2(int b)
20     {
21         a = b;
22         return *this;
23     }
24 
25 private:
26     int a = 3;
27 };
28 
29 int main()
30 {
31     X x;
32     x.set1(6).set2(7).display(); 
33     cout << “ ”;
34     x.display();
35 
36 
37     return 0;
38 
39 }
复制代码

如果set1与set2的返回值是引用,那么

x.set1(6).set2(7).display();     //等价于x.set1(6);  x.set2(7);  x.display(); 

所以此处输出为:7   7

(2)set1与set2的返回值不是引用

复制代码
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class X
 6 {
 7 public:
 8     X display()
 9     {
10         cout << a;
11         return *this;
12     }
13     X set1(int b)
14     {
15         a = b;
16         return *this;
17     }
18 
19     X set2(int b)
20     {
21         a = b;
22         return *this;
23     }
24 
25 private:
26     int a = 3;
27 };
28 
29 int main()
30 {
31     X x;
32     x.set1(6).set2(7).display(); 
33     cout << “ ”;
34     x.display();
35 
36 
37     return 0;
38 
39 }
复制代码

如果set1与set2的返回值是引用,那么

x.set1(6).set2(7).display();     //不等价于x.set1(6);  x.set2(7);  x.display(); 此时后面的.set2(7).display()是对x.set1(6)返回的副本进行操作,所以此处只有x.set1(6)对原对象的值进行了操作

故此处输出为:7   6

posted @   拾月凄辰  阅读(1008)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
主题色彩