#include <iostream>
using namespace std;
class Work{
public:
int age = NULL;//C++ 没有初始化,若不初始化age打印为默认的系统值 初始化为NULL,就等价于初始化为0
char *name;
void change(){
this->age =10;//这里this->age 为什么可以修改age的大小???
//首先,这个this是用->指向age 那就说明此时的this是一个指针
//其次,main中使用Work work在栈空间调用默认构造函数申请内存会暴露申请内存的地址 此时this就指向了申请的地址
//也就是说this就是work的地址,而work 中存在公共成员 name和age
//最后为什么可以改变值?因为此时this 被修饰为 Work * const this
//此时this是为指针常量 此时指针地址不能修改,但指针地址的值可以修改所以age的值可以重新赋值
//this =0x2222;//编译报错 this 地址不能修改
}
/*
* 指针常量和常量指针的区分
* 指针常量是常量,常量指针是指针
* 常量能改值不能该地址,指针能该地址不能改值
*
* 常量指针常量 const int * const Work
* 此时既不能修改地址对应的值也不能修改指针指向的地址
*/
void change_test() const{
// this->age =10;
// this->name ="111";
// this = 0x9876;
// 以上的修改项都会报错,原因:此时this 是常量指针常量:Work * const this const
}
};
int main(){
Work work;
work.change();//work调用change修改了age的大小,为什么???
cout<< work.age<<endl;
return 0;
}
C++中this关键字
最新推荐文章于 2024-08-23 15:00:00 发布
本文探讨了C++中类的工作原理,特别是成员变量的初始化和this指针的使用。当成员变量age未显式初始化时,默认值依赖于类型;在change方法中,this指针用于访问和修改对象的成员,尽管this本身是常量指针,但可以改变其所指对象的成员值。此外,还解释了常量指针常量的限制,即不能修改指针地址及其指向的值。
摘要由CSDN通过智能技术生成