C++:this指针

C++中成员变量和成员函数是分开存储的
每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共同使用一块代码
(即当很多对象调用同一个非静态成员函数时)

问题:这一块代码是如何区分哪个对象调用自己的呢?
C++通过提供特殊的对象指针,this指针,指向被调用的成员函数所属的对象

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

this指针的用途:

  • 当形参和成员变量同名时,可用this指针来区分(解决名称冲突)
  • 在类的非静态成员函数中返回对象本身,可使用return *this
    在这里插入图片描述

三个对象p1,p2,p3,都调用这个函数,那么就用this指针,说白了就是谁调用this指针就指向谁

举例:名称冲突:
在这里插入图片描述
修改:
在这里插入图片描述

class Person
{
public:
    Person(int age)
    {
        //this指针指向被调用的成员函数所属的对象(即谁调用这个函数就指向谁)
        this->age = age;
    }

    Person& PersonADD(Person &p)
    {
        this->age += p.age;//自身的年龄加上别人的年龄
        //this是指向p2的指针,则*this就是P2本体
        return *this;
    }
    int age;
};

//1,解决名称冲突
void test01()
{
    Person p1(18);
    cout << " p1的年龄为:" << p1.age << endl;
}
//2,返回对象本身用*this
void test02()
{
    Person p1(10);
    Person p2(10);

    p2.PersonADD(p1).PersonADD(p1).PersonADD(p1);
    cout << " p2的年龄为:" << p2.age << endl;

}


int main() {
    //test01();
    test02();
   
    system("pause");
    return 0;
}

注意:p2.PersonADD(p1).PersonADD(p1).PersonADD(p1);这一句之所以可以链式,是因为:

Person& PersonADD(Person &p)

这一句中,按引用传参,传递的是对象别名,也就相当于传递了对象本身。
而返回时按引用返回,返回的也是对象本身,此时不会发生拷贝。
如果按值返回,返回时将拷贝临时副本到函数调用点,然后释放空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值