C++ - 常量成员函数

  • 常量成员函数
class Sample
{
  public:
            int value;
            void GetValue() const;
            void func() {};
            Sample() {}
};
void Sample::GetValue() const
{
        value = 0;//wrong
        func();//wrong
}
int main()
{
    const Sample o;
    o.value = 100;//err 常量不可以被修改
    o.func();//err,常量对象上面不能执行非常量成员函数
    o.GetValue();//ok,常量对象上可以执行常量成员函数
    return 0 ;
}
  • 常量成员函数的重载
    • 两个成员函数,名字和参数表都一样,但是一个是 const,一个不是,算重载。
class CTest{
      private :
                  int n;
      public:    
                  CTest(){n = 1;}
                  int GetValue() const {return n;}
                  int GetValue() {return 2*n;}
};
int main()
{
      const CTest objTest1;
      CTest objTest2;
      cout<<objTest1.GetValue()<<","<<objTest2.GetValue();
      return ();
}
  • 常引用
    • 引用前面可以添加 const 关键字,成为常引用。不能通过常引用,修改其引用的变量。
const int &r = n;
r = 5;//error
n = 4;//ok
- ***常引用会经常被用于函数的参数:对象作为函数的参数时候,生成该参数需要调用复制构造函数,效率比较低。用指针作参数,代码又不好看,如何解决?***

可以用对象的引用作为参数,但是又怕引用被无意间修改,所以可以使用常引用:

class Sample{
};
void PrintObj(const Sample & o )
{
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问题来源于今天做的C++ Primer几个练习题。 第16.2题写一个模板函数实现任意类型的比较功能,我是这么写的...
    Lorewalker阅读 5,711评论 1 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,686评论 1 51
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 5,125评论 0 14
  • 我想拾起 远处落满尘埃的扫帚 扫尽漫天阴霾 带一场暴雨 冲刷 掩埋 世人的丑恶嘴脸 肉欲摩擦,金钱至上 淫荡 虚...
    水榭歌沨阅读 202评论 2 5
  • 许多人所谓的成熟,不过是被社会磨去了棱角,变得世故而实际了。那不是成熟,而是精神的早衰和个性的消亡。真正的成熟,应...
    只要你需要我都在这里阅读 248评论 0 0

友情链接更多精彩内容