2012-06-19 147 views
13

我對C++中的朋友函數有疑問。 Friend函數不是claas的成員函數,可以直接從main調用。那麼,如果我們將friend函數保留在privateclasspublic部分中,它會有什麼不同。我一般注意到friend函數總是在公共部分。在什麼情況下,我們應該保持函數在private之內。C++中的朋友函數

+1

我不知道爲什麼這會得到接近的票...這是一個完全合理的(如果措辭不佳)的問題。 – ildjarn

+0

+1 - 「什麼時候做好私人功能的好設計」是一個非常好的問題。 (或者爲什麼它永遠不會) – djechlin

+5

「朋友聲明可以放在類聲明中的任何位置,它不受訪問控制關鍵字的影響。」 - http://en.wikipedia.org/wiki/Friend_function – 2012-06-19 19:21:09

回答

19

編譯器不關注朋友函數是否在類的私有或公共(或受保護)部分。大多數人把它放在公共區域,但無論你放在哪裏,它都會公開顯示。

4

如果您在類的public:private:部分聲明它並不重要。不管怎樣,它都會起作用。

2

private部分中的朋友聲明的一個原因是它可以將它們與它們應該有權訪問的成員函數或對象放在一起。

除此之外,沒有區別。

2

friend關鍵字只是在這裏授予private訪問另一個功能,其中不是你的班級的一部分。由於它不屬於你的班級,所以它不受public/private說明符的影響。

0

無論你把友誼聲明放在哪裏都沒關係。 它可能存在於任何類別部分(公共,私人或受保護)內,但必須放在任何函數或聚合之外。

這裏是一個很好的例子,說明從www.cprogramming.com:

是非常有用的一類看 私有變量另一個類,儘管這些變量可能不應該進行 該類支持的公共接口的一部分。例如,如果 正在編寫二叉樹,則可能需要使用具有私有數據的節點類 ,但對於實際將節點組合在一起以便能夠直接訪問數據的 函數而無需通過Node接口工作。 有時,對於訪問函數甚至可能不適合 甚至可以間接訪問數據。