this指针的意义?

首先我们要知道类中函数和数据的布局:

如同上面这个图所示,每个对象都有自己的数据成员的位置,但是共同调用类的函数成员。

原因:

因为函数成员满足公用的条件,如果每个对象都保存一个函数成员,则消耗很大。


然后我们看下面代码:

根据上面所说,多个对象共同使用类的函数成员。

那么当对象a,b传到函数中时,函数怎样判断是哪个对象呢?

此时就使用到了this指针:上面的a其实被隐含转化成了this->a;

看下面的图:

  • 当第一次进入类构造函数时,this指针的地址和a的地址一样
  • 当第二次进入类构造函数时,this指针的地址和b的地址一样

这样通过this类就知道了是哪一个对象此时使用了共享的函数。


同一个类的对象,其成员函数地址是一样的,表示同一个类的对象的成员函数是共用的:

  1. 数据是独立的。
  2. 成员函数是共用的。

小知识:怎样通过函数指针调用函数

  • 函数指针定义模板:typedef void(A::*x)();
  • 使用:x m = &A::fun1;
  • 调用:(a.*m)();

代码:

#include<iostream>

using namespace std;

class A{
public:
	void fun1()
	{
		cout << "output something like this" << endl;
	}
};

typedef void(A::*x)();

int main()
{
	A a;

	x m = &A::fun1;

	(a.*m)();

	system("pause");
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值