C++函数返回值与左值

class Int
{
    int value;
public:
    int GetValue()const//获取成员数据的值
    {
        return value;
    }
    void SetValue(int x)//改写成员数据的值
    {
        value = x;
    }
    //将以上两个函数合成为一个函数完成两个功能
    //方法一:通过函数的重载
    int Value1()const
    {
        return value;
    }
    void Value1(int x)
    {
        value = x;
    }
    //方法二:使用引用作为返回值,这样可以给函数赋值也可以从函数中取值
    int& Value2()
    {
        return value;
    } 
};
//方法一:利用函数的重载
int main()
{
    Int a = 10;
    cout << a.Value1() << endl;
    a.Value1(20);
    cout << a.Value1() << endl;
    return 0;
}
//方法二:引用作为返回值
int main()
{
    Int a=10;
    int x = a.Value2();
    cout << x << endl;
    a.Value2() = 20;//相当于Value2(&a)=20;  由于Value2()函数是以引用的形式返回a的value值,函数返回值为引用时是左值,所以可以被赋值。
    cout << a.Value2() << endl;
    return 0;
}

函数能被赋值的条件是,函数返回值是左值,而函数返回值为左值的条件就是函数的返回值类型为引用。

总结:函数的返回值类型为引用时,其返回值为左值,可以被赋值;函数的返回值类型为普通值时,为右值(将亡值)。

但这样的函数对于常对象无法使用

int main()
{
    const Int a=10;
    int x=a.Value2();//error,a为常对象无法调用普通成员函数
    cout<<a.Value()<<endl;
    return 0;
}

为了解决这种问题,就需要将该函数改为常方法:

int& Value2()
{
    return value;
}
const int& Value2()const//该方法设置为常方法时,返回值也必须改为常引用,因为以普通引用返回时,其他成员会改变该值,而常对象的成员数据不允许改变
{
    return value;
} 
int main()
{
    const Int a=10;
    int x=a.Value2();//ok
    cout<<a.Value()<<endl;
    return 0;
}

这样普通对象会调用普通函数获取值,修改值;而常对象则会调用常方法获取值,但不能更改,因为其返回值为常引用。常方法可以和普通方法进行重载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值