总结:
(1)this指针的本质:
1)this指针就是一个const修饰的指针,这个指针指向的是你调用这个函数的对象;
2)this指针不能修改
(2)const修饰的函数
1)不能修普通改变量
2)能修改mutable修饰的变量
3)const修饰的实际上是this指针
(3)const修饰的对象
1)只能调用const修饰的函数
2)不能修改对象中的变量,除非用mutable修饰的变量
3)能够读取对象中的变量的值
4)创建常对象的时候注意要手动创建一个构造函数,否则会报错
5)遵守访问权限规则
#include<iostream>
using namespace std;
class const_rember
{
public:
const_rember()
{
}
void const_function()const//注意const的位置
{
//const_rember * const this=&obj; this指针的本质,这里的obj是调用这个函数的对象
//this=NULL;this指针不能修改是一个常量指针(注意和下面区分,这里的常量指针是指这个指针是被const修饰的指针和下面说的常量指针有区别)
/*( //int const *p=a;常量指针;指针p可以修改,指向的常量a不可以修改
//int *const p=a;指针常量;指向的变量a可以修改,指针p不可以修改;)*/
//this->m_a=10;const修饰的函数内部不能改变成员变量的值
m_b=100;
cout<<m_b<<endl;
}
void function()
{
}
int m_a;
mutable int m_b;//使用mutable修饰变量能够让变量在常函数中被修改
};
int main()
{
const_rember obj;
obj.const_function();
const const_rember obj1;//创建常对象之前需要在类中手动创建一个构造函数
obj1.const_function();
// obj1.fuction();常对象只能调用常函数,无法调用普通函数
// obj1.m_a=200;
cout<<obj1.m_a<<endl;//常对象可以读取对象的变量,但是只有加了mutable修饰的变量才能修改,其他类型的变量无法修改;
}