如何取類的非靜態數據成員地址

        要經過地址對類的非靜態數據成員進行存取,須要將對象的起始地址加上非靜態成員的偏移量獲得成員的地址。例如:指針

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

相關文章
相關標籤/搜索