c++this指针详解 第三级

目录

this指针介绍

this指针的使用

this指针的本质

this指针的tips


this指针介绍

C++类实例化创建对象,函数是共用的,变量是每个对象独一份的。(第二级内容,类的存储部分)

那在函数中要使用成员变量,怎么知道是哪个对象的呢?

C++中有一个隐藏彩蛋,在每一个成员函数中都有一个藏着的this指针作为函数的第一参数。

this指针就是指向当前调用函数的对象的一个指针,既然是一个指向对象的指针,相对的就可以通过这个指针,获取当前对象的成员变量。

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;//打印出来还是10
 
	Person p2(20);
	p2.PersonAddPerson(p1).PersonAddPerson(p1);	//20+10+10=40 链式调用(返回的还是对象)
	cout << "p2.age = " << p2.age << endl;
	return 0;
}

由上述代码看出

1.this指针,并不用写在函数参数上,就可以使用。

2.出现同名变量时,this指针代表的是类内的成员变量,而参数上的则是传入的变量。

3. return *this,解引用this指针,就是这个对象。返回值如果是引用,相当于返回对象本身。

4.由3我们知道如果能返回对象本身,那就可以链式调用,调用完一次后返回的还是本身,在调用这个函数,就是链式调用。

this指针的本质

this指针的本质:const Type(类名)* const this;双const限制

双const 第一个const保证的是this指针指向的对象的内容不能改变。(关于对象内容的)

第二个const保证的是this指针指向的对象不能改变。(关于指针指向的)

const详解点这里->后期补上,还没写。

Person& PersonAddPerson(/*const Person* const this,*/Person p){
		this->age += p.age;
		//返回对象本身
		return *this;
	}

p2.PersonAddPerson(p1).PersonAddPerson(p1);

这段代码中我们第一个参数const Person* const this,后面person p是传入的参数。

下面调用这段代码时  p2 调用的函数所以就指定了  p2 是此次调用的this。

所以p2.PersonAddPerson(p1) <==> PersonAddPerson(&p2,p1);

注意: PersonAddPerson(&p2,p1)是不可用的只是抽象表示一下

this指针的tips

1.只能在成员函数中使用,且只有成员函数有

在成员函数中使用,全局函数和静态函数(函数前 + static)就算写在类中也不能使用。

2.在使用时创建,完成时删除。同时系统默认创建,不接受外界传入。

创建指针,然后指针指向对象,结束后可以通过*this返回对象,但是this不能传出

3.经典描述

当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子的全貌 ,你看不到了。   
对于一个对象(也就是类的实例)来说,你可以看到它的成员函数、成员变量,但是看不到对象本身了。
所以有了this指针,它时时刻刻指向你这个对象本身(随时能通过指针找到对象,然后进去房子里找东西)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值