タグ付けされた質問 「friend」

30
C ++で 'friend'を使用する必要があるのはいつですか?
私はC ++のFAQを読んでいて、そのfriend宣言に興味がありました。個人的には使用したことがありませんが、言語を探求することに興味があります。 使用の良い例は何friendですか? FAQをもう少し読むと、 << >>演算子をオーバーロードして、それらのクラスの友達として追加です。しかし、これがカプセル化を壊さないかどうかはわかりません。これらの例外はいつOOPである厳密性の範囲内にとどまることができますか?
354 c++  oop  encapsulation  friend 

22
C#がC ++スタイルの 'friend'キーワードを提供しないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 この質問を改善する C ++の友人のキーワードが可能にclass A指定するclass Bその友人として。これによりClass B、private/のprotectedメンバーにアクセスできますclass A。 これがC#(およびVB.NET)から除外された理由について、私は何も読んだことがありません。この以前のStackOverflowの質問に対するほとんどの回答は、C ++の有用な部分であり、それを使用する十分な理由があると述べています。私の経験では同意する必要があります。 もう1つの質問friendは、C#アプリケーションと同様のことをする方法を本当に尋ねているようです。答えは一般にネストされたクラスを中心に展開しますが、friendキーワードを使用するほどエレガントではありません。 オリジナルのDesign Patternsブックでは、例全体で定期的に使用しています。 つまり、要約すると、なぜfriendC#に欠けているのか、そしてそれをC#でシミュレートする「ベストプラクティス」の方法とは何でしょうか。 (ちなみに、internalキーワードは同じものではなく、アセンブリ全体のすべてのクラスがinternalメンバーにアクセスfriendできるようにする一方で、特定のクラスに他の1つのクラスへの完全なアクセス権を与えることができます)
208 c#  c++  design-patterns  oop  friend 


2
パブリックフレンドスワップメンバー機能
copy-and-swap-idiomへの美しい答えには、少し助けが必要なコードがあります。 class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); } // ... }; そして彼はメモを追加します タイプにstd :: swapを特化し、自由関数スワップと並んでクラス内スワップを提供する必要があるという他の主張があります。しかし、これはすべて不必要です。スワップの適切な使用は、修飾されていない呼び出しによるものです。 、そして私たちの機能はADLを通じて発見されます。1つの関数が行います。 でfriend、私は「非友好的」という用語には少しだ、私は認めなければなりません。だから、私の主な質問は: 無料の関数のように見えますが、そのクラス本体の内部ですか? なぜこれはswap静的ではないのですか?明らかにメンバー変数を使用しません。 「スワップを適切に使用すれば、ADL経由でスワップが見つかります」?ADLは名前空間を検索しますよね?しかし、それはクラスの内部も調べますか?それともどこからfriend来るのですか? 副質問: C ++ 11では、をでマークする必要swapがありnoexceptますか? C ++ 11とすると、範囲のために、私は配置する必要がありますfriend iter begin()し、friend iter end()クラス内の同じように?friendここでは必要ないと思いますよね?

3
C ++でのフレンド宣言-パブリックとプライベートの違い
フレンド関数/クラスをプライベートまたはパブリックとして宣言することには違いがありますか?これについてオンラインで何も見つけることができないようです。 私は以下の違いを意味します: class A { public: friend class B; }; そして class A { private: //or nothing as the default is private friend class B; }; 違いはありますか?
142 c++  private  friend  public 

10
C ++が継承された友情を許可しないのはなぜですか?
C ++で友情が少なくともオプションで継承できないのはなぜですか?私は明白な理由で禁止されている推移性と反射性を理解しています(私はこれは単純なFAQの引用回答を回避するためだけに言っています)が、virtual friend class Foo;パズルの線に沿った何かの欠如は私を困惑させます。この決定の背後にある歴史的背景を知っている人はいますか?友情は本当に限定されたハックに過ぎなかったのか、それからいくつかのあいまいな立派な用途にその道を見つけましたか? 説明のために編集します。私は次のシナリオについて話しています。Aの子がBのいずれか、またはBとその子の両方にさらされているわけではありません。必要に応じて、フレンド関数のオーバーライドなどへのアクセスを許可することも想像できます。 class A { int x; friend class B; }; class B { // OK as per friend declaration above. void foo(A& a, int n) { a.x = n; } }; class D : public B { /* can't get in A w/o 'friend class …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.