常量对象、常量成员函数及其重载

来源:互联网 发布:手机淘宝如何快速秒杀 编辑:程序博客网 时间:2024/05/18 01:08

1. 常量对象:如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字

eg.

class Demo{private:int value;public:void SetValue();};const Demo Obj;//常量对象
Obj变成一个常量对象,其值不能修改


2. 常量成员函数:在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数

常量成员函数在执行期间不应修改其所作用的对象。所以,常量成员函数不能修改成员变量的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。

eg.

class Sample{public:int value;void GetValue() const;void func() {};Sample() {};};void Sample::GetValue() const{value = 0;//err.常量成员函数执行过程中不能修改作用的对象的值func();//err.常量成员函数不能调用其他非常量成员函数}int main(){const Sample o;o.value = 100;//err.常量对象不可被修改o.func();//err.常量对象上不能执行非常量成员函数o.GetValue();//ok.常量对象上可以执行常量成员函数return 0;}


3. 常量成员函数的重载:两个成员函数,名字和参数表都一样,一个是const,一个不是,算是重载情况

eg.

#include <iostream>#include <string>using namespace std;class CTest {private:int n;public:CTest(){cout << "Please input the number:" << endl;cin >> n;}int GetValue() const { return n; }int GetValue() { return 2 * n; }};int main() {const CTest objTest1;CTest objTest2;cout << objTest1.GetValue() << "," << objTest2.GetValue() << endl;return 0;}