//4.3.4  const修饰成员函数

//常函数:
//⚪成员函数后加const后我们称为这个函数为常数

//⚪常含数内不可以修改成员属性

//⚪成员属性声明时加关键字mutable后,在长函数中依然可以修改

//常对象:
//⚪声明对象前加const城改对象为常对象

//⚪常对象只能调用常含数


#include <iostream>

class Person
{

public:
	
	//this指针的本质  是指针常量  指针的指向是不可修改的
	//const Person * const this; 
	//在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
	void showPerson() const
	{
		this->m_B = 100;
		//this->m_A = 100;
		//this = NULL;  //this指针不可以修改指针的指向的
	}

	void func()
	{
		m_A = 100;
	}

	int m_A;
	mutable int m_B;            //特殊变量,即使在常含数中,也可以修改这个量,加关键字mutable


};



void test01()
{
	Person p;
	p.showPerson();
}

void test02()
{
	const Person p;             //在常对象前加const,变为常对象
	//p.m_A = 100;
	p.m_B = 100;                //m_B  是特殊变量,即使在常函数中,也可以修改这个值,加关键字mutable
	//常对象只能调用常含数
	p.showPerson();
	//p.func();                 //常对象不可以调用普通成员函数,因为普通成员函数可以修改属性

}

int main()
{


	system("pause");

	return 0;
}