共享数据的保护(常对象,常成员,常引用)

<1>常对象:必须进行初始化并且不能被修改。

class Fun
{
	public:
		Fun(int rx):x(rx){}
	private:
		int x;
};
const Fun funa(2);


<2>常成员函数

类型说明符 函数名(参数表)const; 

1 在函数的定义部分也要带上const关键字。

2 如果一个对象是常对象,那么常对象只能调用常成员函数,不可以调用其他函数。

3 const可以用于对重载函数的区分,如下;

class Fun
{
	public:
		Fun(int rx):x(rx){}
		void OutPut()const;
		void OutPut();
	private:
		int x;
};
void Fun::OutPut()
{
	cout<<x<<endl;
}
void Fun::OutPut()const
{
	cout<<x<<endl;
}
调用
Fun funa(2);
const Fun funb(23);
funa.OutPut();//调用void OutPut() 
funb.OutPut();//调用void OutPut()const 
 

4 无论是否通过常对象调用常成员函数,在常成员函数调用期间,目的对象都被视为常对象,因此常成员函数不能更新目的对象的数据成员,也不能针对目的对象调用没有用const修饰的成员函数。

5 一个习惯:对于无需改变对象状态的成员函数,都应该用const。

<3>常数据成员:类的数据成员前加上const关键字即可,只有在构造函数的初始化中,对其进行初始化,之后任何函数不可对该成员赋值。

静态常数据成员要在类外说明和初始化

class Fun
{
	public:
		Fun(int rx):x(rx){}
	private:
		const int x;
		static const int y;
};
const int Fun::y=12;

<4>常引用:常引用所引用的对象不能被更新

const 类型说明符 &引用名 

如下例子:

class Fun
{
	public:
		Fun(int rx,int ry):x(rx),y(ry){}
		friend void OutPut(const Fun &fun1); 
	private:
		int x,y;
};
void OutPut(const Fun &fun1)
{
	cout<<fun1.x<<" "<<fun2.y<<endl;
}
相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院