<b>C++对象的安排</b>[VC/C++编程]
本文“<b>C++对象的安排</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
阅历过从c到c++的人,一定想知道c++编译器是若何安置类的成员的.这里我大约的作一下介绍,并有一些代码供你举行测试,但愿对大家有点作用吧.
其实这里的标题大概有点大了,简单的说,类的非static成员是按照声明的次序存放在内存区的,而类的static成员和普通的static变量的存储格局一样.我不从简单的东西动手了,直接从一个相对复杂的多重担当的例子动手.看下面的代码:
class Point2d
{
public:
int _x,_y;
virtual f(){}//保证Point2d有个虚拟指针
};
class Point3d:public Point2d
{
public:
int _z;
};
class Vertex
{
public:
virtual void h(){}//保证Vertex3d的第二底子类有个vptr
int next;
};
class Vertex3d:public Point3d,public Vertex
{
public:
int mumble;
};
Point2d,Point3d,Vertex,Vertex3d的担当关系能看得出来吧.再看主函数
int main()
{
Vertex3d v3d;
Vertex*pv;
pv=&v3d;
int*x=&v3d._x;//获得v3d的成员的地址
int*y=&v3d._y;
int*z=&v3d._z;
int*n=&v3d.next;
int*mem=&v3d.mumble;
cout<<"*v3d= "<<&v3d<<endl;//输出第一个vptr
cout<<"*x= "<<x<<endl;//输出成员的x的地址
cout<<"*y= "<<y<<endl;//….
cout<<"*z= "<<z<<endl;//…..
cout<<"*pv= "<<pv<<endl;/.输出第二个vptr
cout<<"*n= "<<n<<endl;//…….
cout<<"*mem= "<<mem<<endl;//……..
return 0;
}
我在vc6.0编译运行的后果是:
&v3d = 0x0012ff64
x = 0x0012ff68
y = 0x0012ff6c
z = 0x0012ff70
pv = 0x0012ff74
n = 0x0012ff78
mem = 0x0012ff7c
以上是“<b>C++对象的安排</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |