C++中定义类对象的时候引入了this指针,指向类定义的对象本身。
this指针的一般用途:
当形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return* this
当我试着修改this指针的指向时,发现vs提示错误:
查阅以后发现this指针的本质是一个指针常量,指针的指向不可修改,即:Person* const this;
但是this指针指向的对象的数据是可以修改的。
如果想要指针指向的值也不能改变,则需要声明常函数 。即在函数用const修饰:
从图中可以看出const修饰成员函数,表示指针指向的内存空间的数据不能修改。这个常函数的作用实际上是将this指针加了const修饰变成const Type* const this;因此this的指向和指向的值都不能修改!!!!
但是C++提供了一种方法可以在常函数中修改this指针指向的内存空间的数据,即用mutable关键词修饰变量。
与常函数类似的还有常变量。
利用const 类名 变量名,定义常变量。从图中可以看出只能访问常变量的成员变量的值,但是无法修改,但是可以修改mutable关键词修饰的成员变量。
从上图可以看出,常变量只能调用常函数,无法调用普通的成员函数!!!
代码:
#include <iostream>
using namespace std;
//**常函数:**
//
//* 成员函数后加const后我们称为这个函数为** 常函数**
//* 常函数内不可以修改成员属性
//* 成员属性声明时加关键字mutable后,在常函数中依然可以修改
//
//
//
//** 常对象:**
//
//* 声明对象前加const称该对象为常对象
//* 常对象只能调用常函数
class Person {
public:
Person() { /*构造函数*/
m_a = 0;
m_b = 0;
}
void show1() const {
//this = NULL; //不能修改指针的指向 Person* const this;
//this->m_a= 100; //但是this指针指向的对象的数据是可以修改的
this->m_b = 100;
}
void myfunc() const{
}
mutable int m_b;
int m_a;
};
void test01() {
const Person p1;
cout << "p1.m_a = " << p1.m_a << endl;
p1.m_b = 100;
//p1.m_a = 100;
p1.myfunc();
}
int main() {
system("pause");
return 0;
}