常量对象
常量成员函数
#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();//这里调用的是非常量成员函数 2
s2.PrintSample();//这里调用的是常量成员函数 1
return 0;
}
ps.一个成员函数的non-const和const版本同时存在(重载)的话,常量对象只会调用const版本,非常量对象只会调用non-const版本