您的位置:首页 > 编程语言 > C语言/C++

C++对象模型(四)

2010-11-21 20:37 106 查看
指向数据成员的指针

使用指向数据成员的指针,关键是看这个类的vptr
放在类的哪个部位。一般放在头部或尾部。

对于某些编译器,往往还用在位移上加一个字节。加这个字节的目的是,区分没有指向任何数据成员的指针和已经指向一个数据成员的指针。因为,如果没有这个字节,当指针指向第一个类成员时,有可能和空指针的内容相同。

在VC
编译器中,没有该附加的字节。

#include <stdio.h>

class Pointnd

{

public:

virtual test(){int i = 0;};

// static Pointnd origin;

float x, y, z;

};

void main()

{

Pointnd origin;

printf("::x = %p/n", &Pointnd::x);

printf("::y = %p/n", &Pointnd::y);

printf("::z = %p/n", &Pointnd::z);

printf("origin.x = %p/n", &origin.x);

printf("origin.y = %p/n", &origin.y);

printf("origin.z = %p/n", &origin.z);

}

VC输出结果:

::x = 00000004

::y = 00000008

::z = 0000000C

origin.x = 0012FF74

origin.y = 0012FF78

origin.z = 0012FF7C

而在solaris8中,加了这个字节:

::x = 5

::y = 9

::z = d

origin.x = ffbefac8

origin.y = ffbefacc

origin.z = ffbefad0

发现这本书越看越慢了。主要是本书的内容确实比较高级,而且作者的思维又比较发散,要将书中的干货提出来确实需要时间。希望能继续坚持下去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: