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

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

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

Point origin;
origin.m_y = 0;

    最后一行对成员m_y的赋值就至关于经过以下方式取m_y的地址:code

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

        请注意其中的-1操做,指向数据成员的指针,其偏移量老是被加上1,这样能够使编译系统区分开"一个指向数据成员的指针,指向类的第一个成员"和"一个指向数据成员的指针,没有指向类的任何成员"。
        每个非静态成员变量的偏移量在编译时期肯定,即便这个成员是经过单一继续或多重继承获得的对象

相关文章
相关标签/搜索