栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

#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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号