c++对象的放置问题
c++对象的放置问题
经历过从c 到 c++的人,一定想知道 c++编译器是如何安排类的成员的.这里我
大概的作一下介绍,并有一些代码供你进行测试,希望对大家有点作用吧.
其实这里的标题或许有点大了,简单的说,类的非static 成员是按照声明的顺序
存放在内存区的,而类的static 成员和一般的static 变量的存储格式一样.我不从
简单的东西入手了,直接从一个相对复杂的多重继承的例子入手.看下面的代码:
class Point2d
{
public:
int _x,_y;
virtua...
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<
#include
class Point2d
{
public:
int _x,_y;//
Point2d(){
_x=10;
_y=20;
}
virtual f(){}
};
class Point3d:public Point2d
{
public:
int _z;
Point3d(){_z=30;}
};
class Vertex
{
public:
int next;
Vertex(){next=40;}
virtual void f(){}
virtual void g(){}
virtual void h(){}
};
class Vertex3d:public Point3d,public Vertex
{
public:
int mumble;
Vertex3d(){mumble=50;}
};
int main()
{
long str[30];
Vertex3d*array=new(str)Vertex3d;
for(int i=0;i
本文档为【c++对象的放置问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。