C/C++培训
达内IT学院
400-996-5531
有个问题是刚开始学习C++的人都想知道的,那就是C++的类对象的大小是多少?可能的猜测是它所有数据成员的大小加上所有函数指针的大小,这样就是类的大小。我们来测试一下,代码如下,如有需要复制即可:
#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指针可以避免混淆。就像下面代码中的一样。
void A::setA(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
}
免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved