2009-01-30 48 views

回答

10

如果您擔心「惡意」修改,那麼即使將數據標記爲private:也無濟於事。

C++訪問說明符僅用於基本上由規則播放的代碼。

將成員標記爲private將會阻止您班級的普通用戶混淆他們。但是,即使是具有錯誤的非惡意代碼也會破壞這些成員。超載,錯誤指針算術或不當使用強制轉換讓C++程序員導致這些問題。

1

那麼,保護成員確實得到繼承。如果你不希望發生這種情況,請讓他們專用

2

在C++中無法防止「惡意」訪問,因爲您總是可以繞過編譯器限制。如果您擔心「意外」更改,請繼續並將其設爲隱私。

0

一般來說,如果你打算聲明一個私有變量,你應該退後一步,問自己爲什麼你甚至在頭文件中發佈聲明?的

,而不是暴露你的成員變量全世界所有foo.h中看到:

class foo { 
private: 
    int please_dont_modify_me; 
    double pretend_you_dont_see_this_declaration; 
    char dont_look_at_this [128]; 
public: 
    .... 
}; 

只需使用一個不完整的私有類型,那就是定義:

class foo { 
    struct foo_privates & mine; // incomplete type 
public: 
    ... 
}; 

然後in foo.cpp ONLY

struct foo_privates { 
    int i; 
    double d; 
    char str[128]; 
}; 

當然,foo的構造函數必須分配單獨的對象,並且析構函數必須銷燬它。