c++ const修饰成员函数与对象

目录

1、const修饰成员函数

2、const修饰对象【常对象】


1、const修饰成员函数

用const修饰的成员函数时,const修饰this指针指向的内存区域,成员函数体内不可以修改本类中任何普通成员变量,当成员变量类型符前用mutable修饰时除外。

void myfun(void) const //const 修饰的是成员函数
{
    //函数内部不能修改 普通成员变量 mutable除外
}

 当函数使用const修饰时,函数不能操作普通成员变量

示例:

class Data {
private:
	int data;
public:
	Data() {
		cout << "无参构造" << endl;
	}
	Data(int data) {
		this->data = data;
		cout << "有参构造" << endl;
	}
	Data(const Data &ob) {
		this->data = data;
		cout << "拷贝构造" << endl;
	}
	~Data() {
		cout << "析构函数" << endl;
	}
public:
	void getData(void) const{
		//this->data = 1000; err const修饰函数 函数不能操作普通成员
		cout << data << endl;
	}
};
void Init() {
	Data ob(10);
	ob.getData();
}
int main() {
	Init();
	return 0;
}

 运行结果:

如果这时候非要在const修饰的函数内部修改普通成员变量的值,这时候可以使用mutable修饰

运行结果:

 

2、const修饰对象【常对象】

常对象只能调用const修饰的成员函数,常对象可以访问const或者非const数据成员,但不能修改,除非成员用mutable修饰

 此时发现,当实例化对象前加上const修饰变成常对象后,这时候调用函数修改data的值,这时候就会报错,因为常对象可以访问const或者非const数据成员,但不能修改

 此时当我们把赋值的语句屏蔽后,此时发现还是报错,这是因为大家可以看见这个代码被屏蔽,但是编译器不知道,为了确保安全性,这样做是不行的,必须加上const,告诉编译器这个函数为常函数。

 当加上const的时候编译器就不会报错。