类的成员函数的存储方式

#include<iostream>
using namespace std;
class box
{
	public:
	void display()
	{
		cout<<length*width*height;
	}
	private:
	int length;
	int width;
	int height;
};
int main()
{
	box box1;
	cout<<sizeof(box1); //sizeof的操作对象不能是函数名和void!!! 
	return 0;
}

输出结果是12,正好是3个int的大小,所以同一类的不同对象数据成员的值一般不同,所以数据成员是存储在对象中的,一个对象所占的空间大小也只取决于该对象中数据成员所占的空间,而与成员函数无关,所以C++也为此专门设立了一个this指针,来区分对不同对象进行的操作。比如说,当我们调用box1.display()时this指针指向box1,只不过平时我们可以省略this指针。

#include<iostream>
using namespace std;
class box
{
	public:
	box(){length=2;width=3;height=4;}
	void display()
	{
		cout<<this->length*this->width*this->height;
	}
	private:
	int length;
	int width;
	int height;
};
int main()
{
	box box1;
	cout<<sizeof(box1)<<endl; //sizeof的操作对象不能是函数名和void!!! 
	box1.display();
	return 0;
}

在这段代码中补全了this指针输出12 和24。

在这里需要说明:

1:无论在类体内定义函数,还是在类体外定义函数,函数的代码段是相同的,都不占用对象的存储空间。

2:不要误认为函数用inline声明了,或者在类体内定义就是例外,inline的作用是将函数在调用点展开,如果不用内联,流程会转去函数代码段的入口地址,所以内联只影响超程序的执行效率,和对象的存储空间没有关系。

3:我们常说“某某对象的成员函数”,这是在逻辑的角度而言的,而成员函数的储存方式是在物理角度而言的,不矛盾。例如说某人有钱,钱并不一定在他身上放着,有可能在银行,但是在哪都是他的钱。同样,虽然成员函数并没有放在对象的存储空间中,但从逻辑的角度,成员函数是和数据一起封装在一个对象中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值