this 指针

一、this指针的定义及用法
我们知道在C++中成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。

那么问题是:这一块代码是如何区分哪个对象调用自己的呢?

C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象

this指针是隐含每一个非静态成员函数内的一种指针,this指针不需要定义,直接使用即可。

this指针的用途:

当形参和成员变量同名时,可用this指针来区分
在类的非静态成员函数中返回对象本身,可使用return *this
#include<iostream>
using namespace std;
 
class Person {
public:
    Person(int age){
        //1、当形参和成员变量同名时,可用this指针来区分
        this->age = age;
    }
 
    Person& PersonAddPerson(Person p){
        this->age += p.age;
        //返回对象本身
        return *this;
    }
    int age;
};
 
int main() {
    Person p1(10);
    cout << "p1.age = " << p1.age << endl;
 
    Person p2(20);
    p2.PersonAddPerson(p1).PersonAddPerson(p1);    //20+10+10=40 
    cout << "p2.age = " << p2.age << endl;
    return 0;
}
二、this指针的本质--指针常量
this指针的本质是一个指针常量:const Type* const pointer; 

他储存了调用他的对象的地址,并且不可被修改。这样成员函数才知道自己修改的成员变量是哪个对象的。

例如:调用date.SetMonth(9) <===> SetMonth(&date, 9),this指针帮助完成了这一转换,使得this指针指向了调用对象data。

三、this指针的特点
1.只能在成员函数中使用,在全局函数、静态成员函数中都不能使用 this 。

(this始终指向当前对象,静态成员函数属于类)

2. this 指针是在成员函数的开始前构造,并在成员函数的结束后清除 。

(和函数的其他参数生命周期一样)

3. this 指针会因编译器不同而有不同的存储位置,可能是栈、寄存器或全局变量 。

(编译器在生成程序时加入了获取对象首地址的相关代码并把获取的首地址存放在了寄存器中)

4. 关于this指针的一个经典回答:

当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子的全貌 ,你看不到了。   
对于一个对象(也就是类的实例)来说,你可以看到它的成员函数、成员变量,但是看不到对象本身了。
所以有了this指针,它时时刻刻指向你这个对象本身。
————————————————
版权声明:本文为CSDN博主「马小超i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21989927/article/details/111474451

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值