如何訪問類中的private成員變數
阿新 • • 發佈:2018-12-26
總所周知,類中的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 *。