引用之利

    C++程序设计中,我们总是需要根据各种需要去设计各种不同的接口、类等,因此数据成员也就成了我们的常客,同时这也引发了这样的一个问题:私有or公有。对于这个问题,或许没有十分具有说服力的答案,各有各理,但这并不是今日讨论的焦点。今日主题在于:如何更好地处理私有与公有。

    在使用STL中的vector时,我们能够清楚地感受到它的便利,也了解了它类似一个可变长的动态数组。vector提供了一个方法size(),通过它,我们可以清楚地知道当前vector对象的具体大小(含有多少个数据元素)。由此,我们不难发现,vector内部实现将表示具体大小的数据成员设为了私有,而通过一个公有方法去获取它的值。这是一个很好的办法,既保证了数据成员不会轻易被外部代码访问及修改,又提供了一种合法途径让我们能够知晓类内一些状态。但我们还能有另一种更好的选择:使用引用!

class Vector
{
private:
    int _length;
protected:
public:
    const int& length = this->_length;
    Vector()
    {
        _length = 0;
    }

    Vector(int len)
    {
        _length = len;
    }

    void ChangeLen(int len)
    {
        _length = len;
    }
};


 

    上面是一段简单的模拟vector的代码,同样的,我将表示Vector对象具体大小的数据成员设为了私有,但我并未写一个方法去获取其值,取而代之的,我利用一个公有常引用,使其指向我所需要获取的数据成员。我们都知道,引用是一个变量的别名,所以这个常引用代表的就是表示Vector对象具体大小的数据成员,只是我为其加上了const限制,让其不能被改变。我们可以看出,这样的办法,或许将会比使用公有方法获取私有成员更简单,但也有很大隐患,我们可能一个疏忽,就将导致私有成员可以被轻易地随便更改!下面,再来看一段代码:

class Vector
{
private:
    int _length;
protected:
public:
    int& length = this->_length;
    Vector()
    {
        _length = 0;
    }

    Vector(int len)
    {
        _length = len;
    }

    void ChangeLen(int len)
    {
        _length = len;
    }
};


 

    仔细一看,我们就发现,公有常引用变成了普通引用,这导致,如果我们改变了它的值,其对应的私有数据成员的值也随之改变,如果我们的初衷是私有数据成员值不可随意更改,那这就成了一个可怕的事实!或许,就在你的一个疏忽,少写了const!当然,这并不是完全没好处的,或许我们的设计初衷可以对某个私有数据成员进行更改,那此时普通引用既可以获取值又可以修改值。当然,我并不支持这样做,原因是,清楚地区分可更改与不可更改,能让我们在写代码时减少一些顾虑,增添一些条理。如遍历,我们的初衷是不改变值,那我们使用常引用,只要失误写出改值的代码,编译器就将报错,如此,我们就能更专注地倾注精力在实现上,而不是出了问题一步一步去查找问题所在!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值