11.this指针

本文探讨C++类的大小计算,揭秘成员函数不占用类大小的秘密。通过实例分析,揭示成员函数地址相同的原因,指出成员函数是公用的。讲解this指针的作用,它在成员函数调用时标识当前对象,确保正确操作。同时介绍了__thiscall调用约定,以及函数指针的相关知识。
摘要由CSDN通过智能技术生成

11.this指针

class CClock
{
	int m_Hour;
	int m_Minute;
	int m_Second;

	void getHour(){};
	void setHour(){};
}

问题1:上面的类CClock占多少个字节?
答案1:通过sizeof(CClock)可以知道CClock占用12个字节
思考1:类的大小仅仅是数据成员的大小吗?类中的成员函数为什么不占用内存?

CClock clock1;
CClock clock2;

clock1.getHour();
clock2.getHour();

通过函数指针取clock1.getHour与clock2.getHour成员函数的地址发现,虽然是两个不同对象的成员函数,但是它们的地址相同
谜题揭晓:
同一个类的成员函数地址是一样的,并且不占用类的大小
用一个类的对象的成员函数是公用的
也就是说,同一个类数据成员是独立的,但成员函数却是公用的

问题2:既然类的成员函数是公用的,那么在clock1.getHour()和clock2.getHour()调用类的成员函数时,成员函数是如何区分那个对象正在对其进行调用?
答案2:
(1)这个问题的回答需要结合上一节中使用C语言模拟类的封装,当我们在结构体外部书写成员函数时,实际上向成员函数中传递了一个结构体指针,这个结构体指针就表明了目前是哪个对象正在调用该成员函数
(2)同样的道理,类的成员函数中也有一个这样的隐藏指针this,this指明了目前是哪个对象正在调用成员函数

void CClock::setHour(int nHour)
{
	this->m_Hour = nHour;//this指针指向当前调用该成员函数的对象
	return;
}

this指针
对类的成员函数调用时会偷偷地传递this指针,并且是通过__thiscall的方式进行函数调用,__thiscall表示通过寄存器ecx进行参数传递

补充:函数指针的定义及其用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值