C++中this关键字

#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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值