在写代码的时候,发现了一个小问题:
例一:
#include
输出为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
输出为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
输出为40.
原因:类内函数addAge()是以引用返回的,这种时机下不会调用拷贝构造函数,而是返回p2本身。main函数中第一次p2.addAge(p1)返回一个p2,p2的age=20,再addAge(p1)一次还是返回p2,p2的age=30,再来一次依旧返回p2,p2的age=40,最终main函数中输出p2的age。