面向对象提高———常量成员函数

常量对象:

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

示例:

class Sample {
	private :
		int value;
	public:
		Sample() { }
		void SetValue() { }
};

const Sample Obj; // 常量对象

Obj.SetValue (); //错误 。常量对象只能使用构造函数、析构函数和 有const 说明的函数(常量方法)

注意:常量对象只能使用构造函数、析构函数和 有const 说明的函数(常量方法)

常量成员函数:

1:在类的成员函数说明后面可以加const关键字,则该成员函数成为常量成员函数
2:常量成员函数内部不能改变属性的值)(静态成员变量除外),也不能调用非常量成员函数(静态成员函数除外)
3:在定义常量成员函数和声明常量成员函数时都应该使用const 关键字

#include 

using namespace std;


class Sample {
	private :
		int value;
	public:
		Sample(int s): value(s){}
		void PrintValue() const;
};

void Sample::PrintValue() const { //此处不使用const会导致编译出错
	cout << value<<"      我是常量成员函数";
}


void Print1(const Sample &o) {
	o.PrintValue();  //若 PrintValue非const则编译错
}


int main(){
	const Sample r(5);
	Print1(r);
	return 0;
} 
/*
输出结果:
5      我是常量成员函数
*/

常量成员函数的重载:

1:两个函数,名字和参数表都一样,但是一个是const,一个不是,算重载。

mutable成员变量:

1:如果一个成员变量在前面加上mutable关键字,那么可以在const成员函数中进行修改

#include 

using namespace std;


class Sample {
	private :
		mutable int value;   //这里使用了mutable关键字
	public:
		Sample(int s): value(s){}
		void PrintValue() const;
};

void Sample::PrintValue() const { //此处不使用const会导致编译出错
	this->value++;     //修改成员变量的值
	cout << value<<"      我是常量成员函数";
}


void Print1(const Sample &o) {
	o.PrintValue();  //若 PrintValue非const则编译错
}


int main(){
	const Sample r(5);
	Print1(r);
	return 0;
} 

你可能感兴趣的:(#,c++面向对象)