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