C++中this关键字

本文探讨了C++中类的工作原理,特别是成员变量的初始化和this指针的使用。当成员变量age未显式初始化时,默认值依赖于类型;在change方法中,this指针用于访问和修改对象的成员,尽管this本身是常量指针,但可以改变其所指对象的成员值。此外,还解释了常量指针常量的限制,即不能修改指针地址及其指向的值。
摘要由CSDN通过智能技术生成
#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值