通過聲明一個成員私人,非朋友功能不能直接訪問該成員。但有一種方法可以通過使用指針的類型來訪問它們,例如:防止程序員使用任何技巧訪問私人類成員
class Foo {
private:
int value;
public:
inline int get() {
return value;
}
inline Foo (int value) {
Foo::value = value;
}
} foo(1234);
int main() {
using namespace std;
cout << foo.display() << endl; // display 1234
int *p = (int *)(&foo); // HERE!
*p = 5678;
cout << foo.display() << endl; // display 5678, foo.value has been changed
return 0;
}
我們是否可以阻止用戶使用這些技巧?或者我們可以禁止將Foo *
轉換爲int *
?
簡答:你不能。 –
你的代碼有*未定義的行爲*順便說一句。 – juanchopanza
@juanchopanza我的編譯器 - GCC編譯沒有任何警告和錯誤。 – DMaster