1. 程式人生 > >如何訪問類中的private成員變數

如何訪問類中的private成員變數

總所周知,類中的private屬性的成員變數在類外是無法訪問的,今天我們探討的就是如何在類外訪問private屬性的成員變數。

我們先來看一個簡單的例子:

class STU
{
public:
    STU()
    {
        x = 5;
        y = 10;
    }
private:
    int x;
    int y;
};

int main()
{
    STU t;
    int*p = (int*)&t + 1;
    return 0;
}

通過上面的程式碼我們可以知道,方法是把類物件的地址強制轉化為int*型別,因為類物件裡儲存的只是成員變數,所以通過對指標的操作可以訪問到private型別的成員變數。

接下來還有一個例子:

class STU
{
public:
    STU()
    {
        c = 'f';
        y = 10;
    }
private:
    char c;
    int y;
};

int main()
{
    STU t;
    int*p = (int*)((char*)&t + 4);
    cout << *p << endl;
    return 0;
}

這段程式碼中最重要的就是int*p = (int*)((char*)&t + 4);
因為第一個資料是char型別的,所以要把物件的地址轉化為char*型,物件中存在兩種型別的資料,需要考慮記憶體對齊,所以當要訪問下一個int型變數的時候,指標需要加4,而不是加1。最後要取到int型的變數,還是要把地址強轉為int *。