您的位置:首页 > 其它

如何取类的非静态数据成员地址

2015-07-21 00:00 274 查看
摘要: 静态数据成员地址

要通过地址对类的非静态数据成员进行存取,需要将对象的起始地址加上非静态成员的偏移量得到成员的地址。例如:

class Point
{
public:
int m_x;
int m_y;
};

Point origin;
origin.m_y = 0;

最后一行对成员m_y的赋值就相当于通过如下方式取m_y的地址:

&origin + (&Point::m_y - 1);

请注意其中的-1操作,指向数据成员的指针,其偏移量总是被加上1,这样可以使编译系统区分开"一个指向数据成员的指针,指向类的第一个成员"和"一个指向数据成员的指针,没有指向类的任何成员"。
每一个非静态成员变量的偏移量在编译时期确定,即使这个成员是通过单一继续或多重继承得到的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息