C++ 常函数 常对象 const

2023-12-14 11:56:16

this 指针的本质: Person * const this;

常函数

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

void show() const
{
}

//const Person const this;//限制了 this 指针

当成员变量类型符前用 mutable 修饰时例外。

mutable int m_A;

常对象

常对象只能调用 const 的成员函数

常对象可访问 const 或非 const 成员属性,不能修改,除非成员用 mutable 修饰。

案列

//const修饰成员函数
class Person{
public:
	Person(){
		this->mAge = 0;
		this->mID = 0;
	}
	//在函数括号后面加上const,修饰成员变量不可修改,除了mutable变量
	void sonmeOperate() const{
		//this->mAge = 200; //mAg e不可修改
		this->mID = 10;
	}
	void ShowPerson(){
		cout << "ID:" << mID << " mAge:" << mAge << endl;
	}
private:
	int mAge;
	mutable int mID;
};

int main(){

	Person person;
	person.sonmeOperate();
	person.ShowPerson();

	system("pause");
	return EXIT_SUCCESS;
}
const修饰类对象
class Person{
public:
	Person(){
		this->mAge = 0;
		this->mID = 0;
	}
	void ChangePerson() const{
		mAge = 100;
		mID = 100;
	}
	void ShowPerson(){
        this->mAge = 1000;
		cout << "ID:" << this->mID << " Age:" << this->mAge << endl;
	}

public:
	int mAge;
	mutable int mID;
};

void test(){	
	const Person person;
	//1. 可访问数据成员
	cout << "Age:" << person.mAge << endl;
	//person.mAge = 300; //不可修改
	person.mID = 1001; //但是可以修改mutable修饰的成员变量
	
	//2. 只能访问const修饰的函数
	//person.ShowPerson();
	person.ChangePerson();
}

不能直接修改, 但是可以通过指针间接修改。

文章来源:https://blog.csdn.net/CYS_2020/article/details/134990047
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。