前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++之this指针

C++之this指针

作者头像
zy010101
发布2020-04-08 16:40:36
4430
发布2020-04-08 16:40:36
举报
文章被收录于专栏:程序员

类的大小

有个问题是刚开始学习C++的人都想知道的,那就是C++的类对象的大小是多少?可能的猜测是它所有数据成员的大小加上所有函数指针的大小,这样就是类的大小。我们来测试一下:

代码语言:javascript
复制
#include<iostream>


using namespace std;

class A
{
public:
	A();
	~A();
	void setA(int a, int b, int c);
private:
	int a;
	int b;
	char c;
};

A::A()
{
}

A::~A()
{
}

void A::setA(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
}

class B
{
public:
	B();
	~B();
void setB(int a, double b, double c);
private:
	int z;
	double x;
	double y;
	
};

void B::setB(int a, double b, double c)
{
	this->z = a;
	this->x = b;
	this->y = c;
}

B::B()
{
}

B::~B()
{
}

int main()
{
	A a;
	B b;
	
	cout << "对象a的大小:" << sizeof(a) << endl;
	cout << "对象b的大小:" << sizeof(b) << endl;

	return 0;
}

测试结果如下:

这个大小看起来就是数据成员放在结构体中的大小。依然采用内存对齐。这说明函数成员和数据成员是分开存储的。

那么C++类的函数成员是怎么确定是哪一个对象在调用它?

为了解决这个问题,C++设计了一个叫做this指针的东西。它能帮助成员函数知道谁在调用它。

this指针

this指针存放着当前对象的地址,也就是this指针指向当前对象。可以使用它来返回对象本身。

this指针不是对象的成员。

this指针只能在成员函数内部使用,类外以及成员函数外部都不能使用。

this指针是普通成员函数的一个隐藏参数。

注意:类的静态成员函数不具备this指针。这样就限制了静态成员函数的功能。使得错误降低。

显然,有了this指针做为函数的隐藏参数,函数自然而然就知道是哪一个对象在调用它。就能正确使用相应对象的成员。

this指针的另外一个附加功能就是当类数据成员和类的函数参数名称一致的时候,使用this指针可以避免混淆。就像下面代码中的一样。

代码语言:javascript
复制
void A::setA(int a, int b, int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类的大小
  • this指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档