欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

C++难点七:链式编程中的引用返回问题-举例说明

时间:2023-04-30

在写代码的时候,发现了一个小问题:
例一:

#include using namespace std;class Person{public: int age; Person(int age) { this->age=age; } Person addAge(Person &p) { this->age+=p.age; return *this; }};void test02(){ Person p1(10); Person p2(10); cout<

输出为40.
原因:类内函数addAge()是以值返回的,在难点五中已经说明,这种时机下拷贝构造函数会被调用,所以被返回的其实是另一个与p2现在值一样的变量,main函数中第一次p2.addAge(p1)返回一个p2’,p2’的age=20,再addAge(p1)一次返回一个p2’’,p2’‘的age=30,再来一次则返回p2’’’,p2’’‘的age=40。我们输出的相当于是p2’’’.age,所以正巧是40.
例二:

#include using namespace std;class Person{public: int age; Person(int age) { this->age=age; } Person addAge(Person &p) { this->age+=p.age; return *this; }};void test02(){ Person p1(10); Person p2(10); p2.addAge(p1).addAge(p1).addAge(p1); cout<

输出为20.
原因:同上,类内函数addAge()是以值返回的,在难点五中已经说明,这种时机下拷贝构造函数会被调用,所以被返回的其实是另一个与p2现在值一样的变量,main函数中第一次p2.addAge(p1)返回一个p2’,p2’的age=20,再addAge(p1)一次返回一个p2’’,p2’‘的age=30,再来一次则返回p2’’’,p2’’‘的age=40。
但是与上面不一样的是,我们输出的是p2.age而非p2’’’.age,所以只能输出20.

例三:

#include using namespace std;class Person{public: int age; Person(int age) { this->age=age; } Person& addAge(Person &p) { this->age+=p.age; return *this; }};void test02(){ Person p1(10); Person p2(10); p2.addAge(p1).addAge(p1).addAge(p1); cout<

输出为40.
原因:类内函数addAge()是以引用返回的,这种时机下不会调用拷贝构造函数,而是返回p2本身。main函数中第一次p2.addAge(p1)返回一个p2,p2的age=20,再addAge(p1)一次还是返回p2,p2的age=30,再来一次依旧返回p2,p2的age=40,最终main函数中输出p2的age。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。