C++物件中的私有成員變數可以被訪問
C++物件中的私有(保護)成員變數也可以從物件外面訪問。下面的程式碼會讓你大吃一驚:
#include <iostream.h> class TestClass{ private: int a; char b; public: char c; TestClass(): a(29), b('b'), c('c'){ } }; void main(void) { TestClass* pObject = new TestClass(); int *p_int_a = (int*)pObject; cout <<"The value of pointer p_int_a is: " << *p_int_a++ << endl; char *p_char_b = (char*)p_int_a; cout << "The value of pointer p_char_b is: " << *p_char_b++ << endl; cout << "The value of pointer p_char_b is: " << *p_char_b << endl; }
輸出結果為:
The value of pointer p_int_a is: 29
The value of pointer p_char_b is: b
The value of pointer p_char_b is: c
請按任意鍵繼續. . .
為什麼會這樣?原因很簡單:在C++中,private, protected只是程式邏輯上的一種保護,
即如果破壞了這種規則(從物件外面訪問private,protected成員),只是在編譯器哪兒通不過。
但通過指標可以直接讀取物件中的私有變數,當然,前提是知道物件中成員變數的順序和型別,否則讀取的資料與我們需要的有偏差!