常量对象、常量成员函数和常引用
常量对象
如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字。
class CEngine //引擎类
{
};
const CEngine obj; //常量对象
常量成员函数
1、在类成员函数说明后面可以加上const关键字,则该成员函数成为常量成员函数。
2、常量成员函数执行期间不应该修改其所作用的对象。因此,在常量成员函数中不能修改成员函数的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。
class Sample
{
public:
int value;
void GetValue() const;
void func() {}
Sample() {}
};
void Sample::GetValue() const
{
value = 0; //错误:修改了其所作用的对象
func(); //错误:调用了同类的非常量成员函数
}
int main()
{
const Sample o;
o.value = 100; //错误:常量对象不可以被修改
o.func(); //错误:常量对象上面不能执行非常量成员函数
o.GetValue(); //正确:常量对象可以执行常量成员函数
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 0;
}
/*
输出:
1,2
*/
常引用
引用前面加上const关键字,成为常引用。(不能通过常引用修改其引用的变量)