變量「protected」容易被派生類惡意更改? 我應該在基類變量中使用「private」而不是「protected」嗎?C++中受保護訪問中的數據損壞
0
A
回答
10
如果您擔心「惡意」修改,那麼即使將數據標記爲private:
也無濟於事。
C++訪問說明符僅用於基本上由規則播放的代碼。
將成員標記爲private
將會阻止您班級的普通用戶混淆他們。但是,即使是具有錯誤的非惡意代碼也會破壞這些成員。超載,錯誤指針算術或不當使用強制轉換讓C++程序員導致這些問題。
1
那麼,保護成員確實得到繼承。如果你不希望發生這種情況,請讓他們專用。
2
在C++中無法防止「惡意」訪問,因爲您總是可以繞過編譯器限制。如果您擔心「意外」更改,請繼續並將其設爲隱私。
0
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的構造函數必須分配單獨的對象,並且析構函數必須銷燬它。
相關問題
- 1. C++受保護的訪問
- 2. 如何保護我的文件數據免受磁盤損壞?
- 3. 如何保護SQLite數據庫免受損壞
- 4. 無法訪問C#中派生類中的受保護函數?
- 5. 保護祕密數據不受損害
- 6. C#訪問受保護的領域
- 7. 受保護的訪問
- 8. Python中的「受保護」訪問 - 如何?
- 9. 訪問訂單項Woocommerce中的受保護數據3
- 10. 訪問受保護的對象數組
- 11. 如何在C中訪問受保護的方法#
- 12. C#中實例成員的受保護訪問?
- 13. C#在派生類中訪問受保護的成員
- 14. 通過COM interop在C#中訪問受保護的內存
- 15. 受保護的數據API問題
- 16. memcpy中的數據損壞
- 17. 如何在C#中保護SqlDataReader不受多重訪問
- 18. 無法訪問抽象類中受保護的構造函數
- 19. C++ ifstream/fstream損壞數據
- 20. 免費訪問受保護的成員
- 21. 訪問Android類的受保護變量
- 22. 無法訪問受保護的成員
- 23. 訪問受保護的繼承
- 24. 訪問受保護的成員
- 25. Withings API - 訪問受保護的資源
- 26. 錯誤訪問受保護的成員
- 27. 訪問受密碼保護的URL
- 28. Ajax訪問受保護的資源
- 29. 無法訪問受保護的成員?
- 30. 訪問.htaccess受保護的文件Android