那麼我該如何做到這一點?因此,一旦對象在C++中初始化,任何成員函數都不能更改其數據成員的值。不允許任何成員函數在C++類中更改其數據成員
回答
使所有成員函數const
。這是這項工作的唯一機制,而且工作得很好。如果你也讓他們private
你完全覆蓋。
如果由於某種原因你覺得被迫標記他們受到保護,那麼情況會更復雜。
您將需要各個字段const
,反過來,這將需要您通過成員初始化列表,或在構造一個const_cast
初始化它們。或者也許是一個可變的ctor,但我不確定是否有這樣的事情。
聲明成員爲const。
你的意思是成員函數,對吧? – 2009-12-04 22:09:29
我個人是按upvv爲「成員」,而不是「成員函數」 – 2009-12-04 22:19:47
如果複雜的const成員,初始化變得非常混亂。 Chacun一隻兒子山羊。 – bmargulies 2009-12-04 22:27:05
作爲一個建議,該方法應該後綴const
,因爲它們不會更改成員(數據)。這可能是多餘的,但它會通知此類的用戶。
派生類只能改變父(超類)的成員,如果訪問被標記爲protected
或public
和成員不是const
。然而,使用指針和轉換來改變數據的方法有很多,但原則是不要修改const
對象。
你可以簡單地宣佈,你有興趣保持不變爲const的類的實例:
const Person p("fred");
要做到這一點是通過聲明的方式(S)爲const,像這樣的方式:
void f() const;
但是,重要的是要注意標記爲可變的成員可能仍然會被更改 - 即使通過const方法。有關可變關鍵字的更多信息,您可以閱讀this。
- 1. 在C++中有沒有辦法確保類成員函數不會更改任何類數據成員?
- 2. C++ - 通過成員函數更改一個類的成員值
- 3. 如何用數據成員和成員函數編寫類C++
- 4. 在C++ 14中,constexpr成員可以更改數據成員嗎?
- 5. 使用其他成員函數的C++成員函數
- 6. C++類的成員函數
- 7. C++分配成員的目標函數,類成員函數
- 8. 從成員struct的成員函數中訪問類的成員?
- 9. 從不同的類成員函數調用成員函數
- 10. 防止const成員函數更改成員數組
- 11. 類的成員函數改變類成員常量
- 12. C++數據成員初始化不允許
- 13. 如何從另一個類的成員函數中訪問數據成員和成員函數?
- 14. 如何用此類的其他成員數據初始化類成員數據?
- 15. 基類成員函數直接訪問子類成員函數?
- 16. 在非類成員函數的參數中傳遞類成員函數
- 17. C++根據模板參數值更改成員函數定義
- 18. C++中的類成員函數指針
- 19. 派生類成員函數在C++
- 20. C++重寫在子類函數成員
- 21. 模板成員函數的錯誤:鐺不匹配任何成員函數
- 22. C++:允許訪問受保護的類的成員,而不是私人成員
- 23. C++類 - 如何從另一個成員函數引用成員函數
- 24. C++類及其成員函數的名稱改變?
- 25. 如何在類之外的成員函數中調用成員函數?
- 26. 指針數據成員函數C++
- 27. 靜態成員數組成員函數
- 28. C++傳遞一個類成員項目成員函數
- 29. C++:在基類的成員函數中複製對象數據
- 30. 函數中的類成員函數?
謝謝,哎呀,爲什麼我沒有得到它第一洛茨? – itsaboutcode 2009-12-04 22:08:43
因爲C++使用'const'來表示太多稍微不同的事情。 – bmargulies 2009-12-04 22:09:25
不正確。一個繼承給定類的類將能夠通過成員函數改變成員。 – 2009-12-04 22:10:05