C++ this指针
成员函数没有使用const修饰,this的指向m_A是可以修改的 ,每个表达式都隐含了一个this指针。
#include<iostream>
#include<string>
using namespace std;
//常函数
class Person{
public:
// this指针的本质 是指针常量 指针的指向是不可以修改的
void showPerson() {
this->m_A = 100;
// this = NULL; //this指针不可以修改指针的指向的
}
int m_A;
};
void test01() {
Person p;
p.showPerson();
}
int main() {
test01();
system("pause");
}
想要不允许修改只需要加一个const修饰,变成一个常函数
这里本身this代表的是谁来调用我就代表谁,这里的p调用了showPerson() 所以这里this指向的是p。那我可不可以将这个this不指向p,指向NULL可不可以?我们来验证下
这里你会不会怀疑是const的原因,这里this本身就是一个指针常量,是不可以修改的,不加const这个this的指向也是不可以修改的,这里this指向的是p代表的是p,p的值是可以修改的 ,this的指向不可以修改。
这里是this相当于是Person * const this;这个this是被const修饰的所以this是不可以修改的
我们想要this指针指向的值也不可以修改 // const Person * const this; //在成员函数后面加const,修饰的是this指向,让指针指向的值也不可以修改
现在我们有个新的需求:int m_B; //特殊变量,即使在常函数中,也可以修改这个值
目前还是不能达到要求:只需要加一个关键字mutable修饰m_B变量
讲到这里关于常函数讲完了,接着上面的,下面我们讲一下什么是常对象 ?const Person p;这就是常对象
//常对象
void test02(){
const Person p; //在对象前加const,变为常对象
}
但是对于这个mutable修饰的变量m_B是可以修改的
还有一个知识点: 常对象只能调用常函数。原因:常对象不可以调用普通成员函数,因为普通成员函数可以修改属性
const修饰目的就是被允许修改,如果可以调用普通成员函数,要是在普通成员函数修改对象的属性是不被允许的。
还没有评论,来说两句吧...