在C++中,类对象的存储空间分配方式如下:
(1)一个类对象的分配空间中仅包含所有非静态数据成员,并按照这些数据成员定义的顺序存放。
(2)一个类对象的大小为其所有非静态数据成员的类型大小之和,普通成员函数与sizeof是没有关系的。当类中有一个或者多个虚函数时,由于要维护虚函数表,所以有一个虚函数表指针,另外当存在虚继承时还需要一个指向虚基类的指针,每个指针占用一个地址大小的内存空间,即4个字节。
(3)类对象中的各个数据成员分配内存时也遵守内存对齐规则。内存对齐规则请看:内存对齐
在了解了对象的存储结构后,可以采用取指定地址中值的方式访问对象的私有数据成员,如下程序所示:
#include<iostream> using namespace std; class A{ private: int x; int y; public: A(int i,int j){ x = i; y = j; } }; int main() { A a(1,3); cout<<"a.x="<<*((int *)(&a))<<endl; cout<<"a.y="<<*((int *)(&a)+1)<<endl; }
输出为:
a.x=1 a.y=3 Program ended with exit code: 0