要經過地址對類的非靜態數據成員進行存取,須要將對象的起始地址加上非靜態成員的偏移量獲得成員的地址。例如:指針
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,這樣能夠使編譯系統區分開"一個指向數據成員的指針,指向類的第一個成員"和"一個指向數據成員的指針,沒有指向類的任何成員"。
每個非靜態成員變量的偏移量在編譯時期肯定,即便這個成員是經過單一繼續或多重繼承獲得的。對象