2011-03-06 105 views
7

我還沒有制定出一個具體的案例。但是我即將着手編寫一些我覺得最終會需要的代碼;所以我想知道是否:兩個班可以相互交友嗎?

  1. 兩個班可以彼此相親;這樣他們就可以自由地訪問私人 和其他受保護的成員(我相信答案是肯定的,而且當然我可以簡單地嘗試一下!)。任何詳細的參考或其他問題鏈接與答案 也非常歡迎。我知道前向聲明,幷包含守衛編譯器 預指令及其使用。我的問題更多地涉及到C++語言的語義 ,它可以提供關於這種相互友誼的可能性 以及如何正確使用它。
  2. 這是通常推薦的嗎?人們是否定期使用這種設計? 在什麼情況下,這是一個推薦的設計(最好有一些 的例子)。

回答

8

可以有彼此的友誼:

class A { 
    friend class B; 
}; 

class B { 
    friend class A; 
}; 

無論這是有道理的,完全取決於你試圖解決的問題。在某些情況下它肯定有意義。

我當前項目中利用相互友誼的唯一例子是容器實現:容器類是其迭代器類的朋友,反之亦然。

+0

也許我們需要另一個術語。這些類是兄弟姐妹,不僅僅是朋友:-) – 2011-03-06 05:15:02

+12

@Martin:也許有人可以起草一個建議,爲此添加一個「bff」關鍵字到C++! – 2011-03-06 05:16:07

+9

@馬丁:*有福利的朋友*?一個「如果你告訴我你的,我會告訴你我的」關係。 – nybbler 2011-03-06 05:17:30