常量对象
常量成员函数

#include <bits/stdc++.h>using namespace std;class sample{public:int x;sample(int);void GetSample(void);void PrintSample(void) const;};sample::sample(int _x):x(_x){cout<<"Constructor Called"<<endl;}void sample::GetSample(void){cout<<x<<endl;}void sample::PrintSample(void) const{x=3;//Error 常量成员函数不可以修改成员变量的值GetSample();//Error 常量成员函数不可以调用非静态成员函数cout<<x<<endl;}int main(void){const sample s(2);//OK 常量对象可以调用构造函数s.PrintSample();//Ok 常量对象可以调用自己的常量成员函数s.x=3;//Error 常量对象的成员变量不可以修改s.GetSample();//Error 常量对象不可以调用非静态成员函数return 0;//2}
注意:如果一个成员函数中没有调用非常量成员函数,也没有修改成员变量的值,那最好把它写成常量 成员函数
常量成员函数的重载
两个成员函数,名字和参数表都一样,然而一个是const一个不是,算重载
#include <bits/stdc++.h>using namespace std;class sample{private:int n;public:sample(void);void PrintSample(void);void PrintSample(void) const;};sample::sample(void){n=1;}void sample::PrintSample(void){cout<<2*n<<endl;}void sample::PrintSample(void) const{cout<<n<<endl;}int main(void){sample s1;const sample s2;s1.PrintSample();//这里调用的是非常量成员函数 2s2.PrintSample();//这里调用的是常量成员函数 1return 0;}
ps.一个成员函数的non-const和const版本同时存在(重载)的话,常量对象只会调用const版本,非常量对象只会调用non-const版本
