2013-07-18 18 views

回答

7

它擊敗了訪問者的目的。如果您提供了兩個 函數,那麼您最好使數據成員公開,並使用 完成它。

編輯:

只是爲了讓事情非常清楚:有案件其中使用 一個C風格struct是最合適的解決方案。在 這些情況下,您將數據成員公開,並且不必擔心 有關訪問者。對於具有重要行爲的班級,另一方面,您將不會擁有訪問者,或者只有極少數訪問者。對於 大部分,內部狀態是而不是直接反映在 公共接口(以及通常只讀取 的狀態)。關於你都需要存取的唯一時間是 類,其基本數據,但其必須實施跨越數據 不變,

(以及它的價值:如果數據是邏輯上的屬性 類,我用:

int amount() const { return myAmount; } 
void amount(int newValue) { myAmount = newValue; } 

對於不是邏輯上的屬性值的干將,但是 ,我將使用getAmount()

+1

+1 - A-MEN!公共數據成員的罪惡被極大地誇大了。 –

+0

@JohnDibling它取決於上下文。在實踐中,我發現我確實有很多類,只是結構,所有數據成員都是公開的。還有一些沒有公共數據成員的人。 –

+1

訪問者至少可以更輕鬆地在稍後切換到複雜的getter和setter。 –

1

你例子中的第二個給人以原始的用戶訪問。,沒有任何形式的保護。 「封裝」是OOP的一個重要方面,其目的是確保所有對變量的訪問都是在類中完成的 - 這樣類可以控制值範圍或其他有效性。

如果您希望課程透明地允許用戶使用amount,那麼請將其稱爲amount並將其公開。那時就不需要訪問器函數。

0

這樣做的問題是它可以打敗getter/setter慣例的目的。如果您將可變引用傳遞給私有成員,則不妨公開該成員並消除函數調用的麻煩。

另外,我發現這種語法很醜陋,無法讀取,但是這是我個人的口味:

foo.amount() = 23;