const 和non-const成员函数避免重复

如果成员函数有个const区别,代表成员函数被重载。

由于两类函数有部分功能重复,因此可以定义一个功能,另外一个函数调用另一个重载的成员函数。

实例:

class X
{
public:
    /*前面的const代表返回值是const,这是因为在调用该函数时可能会出现问题,例如:
    if(x[1]=2),本来的意思可能是判断x[1]是否等于2,但因为少打一个字符,就造成错误,如果不加const限定符,编译器不会报错,因此,需要加入const。
    后面的const代表该函数由const对象调用,在函数体内,一般不改变对象成员。*/
    const char& operator[](size_t pos) const
    {
        ...
        return text[pos];    
    }
    char & operator[](size_t pos)
    {
        return const_cast<char &>(static_cast<const X&>(*this)[pos]);
    }
private:
    char *text;
}

char & operator[](size_t pos)中,使用static_cast先将对象转成const类型,避免无穷递归。转成const类型后,调用const char& operator[](size_t pos) const函数,然后将返回的const类型通过const_cast转换符,删去const属性。

为什么不先定义non-const函数,再用const函数调用non-const函数?

这是因为const成员函数承诺绝不改变其对象的逻辑状态,如果在const成员函数内调用non-const成员函数,就会冒这种风险。

全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
07-09 20:50
门头沟学院 Java
码农索隆:1.教育背景和荣誉证书合二为一。 2.获奖项目理一遍,你做了什么,对你求职的岗位有什么帮助,没有就删掉。 3.技能特长和教育背景交换位置。 4.技能特长写的太差,上网上找简历参考。都不用问你别的,一个redis就能把你问住,写写你具体会redis哪些方面的知识。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务