- 常量成员函数
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 )
{
}