要经过地址对类的非静态数据成员进行存取,须要将对象的起始地址加上非静态成员的偏移量获得成员的地址。例如:指针
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,这样能够使编译系统区分开"一个指向数据成员的指针,指向类的第一个成员"和"一个指向数据成员的指针,没有指向类的任何成员"。
每个非静态成员变量的偏移量在编译时期肯定,即便这个成员是经过单一继续或多重继承获得的。对象