#include <iostream>
class Point3d {
public:
virtual void func(){}
private:
int x;
int y;
int z;
public:
// 注意写法只是在 int* get_offset()的基础上额外添加了Point3d::限定符
static int Point3d::* get_offset_x()
{
return &Point3d::x;
}
static int Point3d::* get_offset_y()
{
return &Point3d::y;
}
static int Point3d::* get_offset_z()
{
return &Point3d::z;
}
};
int main()
{
Point3d p;
printf("Point3d::x offset: %d\n", Point3d::get_offset_x());
printf("Point3d::y offset: %d\n", Point3d::get_offset_y());
printf("Point3d::z offset: %d\n", Point3d::get_offset_z());
return 0;
}
输出:
Point3d::x offset: 8
Point3d::y offset: 12
Point3d::z offset: 16
解释:
x 的偏移为8,是因为vptr占据了最开头的8字节(64位环境)