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<
  • 常引用
    • 引用前面可以添加 const 关键字,成为常引用。不能通过常引用,修改其引用的变量。
const int &r = n;
r = 5;//error
n = 4;//ok
- ***常引用会经常被用于函数的参数:对象作为函数的参数时候,生成该参数需要调用复制构造函数,效率比较低。用指针作参数,代码又不好看,如何解决?***

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

class Sample{
};
void PrintObj(const Sample & o )
{
}

你可能感兴趣的:(C++ - 常量成员函数)