問題タブ [friend]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - クラスが名前空間の下にある場合、フレンド関数はプライベート関数にアクセスできません
名前空間内にクラスがあり、そのクラスにプライベート関数が含まれています。そして、グローバル機能があります。そのグローバル関数を、名前空間内にあるクラスのフレンドにしたい。しかし、私が友人として作ると、コンパイラは関数がグローバルではなく、その名前空間自体の中にあると考えます。そのため、グローバル関数でプライベート メンバー関数にアクセスしようとしても機能しませんが、その名前空間自体で同じ名前の関数を定義すると機能します。以下は、あなたが見ることができるコードです。
私も友達として友達を作ろうとしました void ::fun(); また、それは役に立ちません。
c++ - C++の未使用のフレンドクラス
friend
クラスが宣言されているがプライベートメンバーにアクセスしていないかどうかを(たとえばコンパイラの警告で)検出する方法はありますか?友情が役に立たないとき?
c++ - クラスの友達ですが、プライベートメンバーにアクセスできません
フレンド関数は、クラスのプライベート メンバーにアクセスできるはずですよね? それで、私はここで何を間違えましたか?.h ファイルに operator<< を含めました。このクラスと仲良くするつもりです。
c++ - 友人の適切な使用?特定の型のオブジェクトを操作するために設計されたコンテナー クラス
FooManager
タイプ の複数のオブジェクトを管理するために作られたとしましょうFoo
。は、現在の状態を評価するために のFooManager
一部を確認する必要があります。Foo
以前は、いくつかのアクセサーを使用してこれらのパーツを確認していましたが、実際にこれらを使用している唯一のクラスFoo
であることに気付きました。と友達にFooManager
なることにしました。これにより、ほとんどのクラスが非公開になりました。FooManager
Foo
Foo
これは友人の適切な使い方ですか?私の推論は、の内部FooManager
への完全なアクセスを提供する一方でFoo
、他のすべてへのアクセスを完全にブロックするため、カプセル化に役立つというものでした。
c++ - テンプレート化された構造体/クラスを友達として宣言するにはどうすればよいですか?
次のことをしたいのですが。
しかし、私のコンパイラ(VC8)はそれに窒息します:
私はすべての人のtemplate struct foo
友人のfoo<T>
すべての可能なインスタンス化をしたいと思いますT
。
これを機能させるにはどうすればよいですか?
編集:これ
コンパイルしているようですが、正しいですか?フレンドとテンプレートの構文は非常に不自然です。
c++ - テンプレートフレンドとネストされたクラス
次のコードを検討してください。
foo<T>::bar
のすべてのインスタンス化を、の友達にしたいと思いfoo<T>::bar<S>
ますS
。がネストされたテンプレートでない場合bar
、上記の構文は問題なく機能します。しかし、私が例えばそうするとき
MSVC8(Visual C ++ 2005)はそれを好きではありません:
コンパイラを使用すると、同じエラーが発生します
代わりは。どうすれば私が望むことを達成できますか?
編集:私はダブルチェックしました(ここは朝です、そして私は本当に起きていません)、これはVC8のバグのようです:
c++ - あるクラスで別のクラスのプライベート メンバーであるフレンドを宣言できないのはなぜですか?
次のコードがあるとします。
Screen
クラスがWindowMgr::relocateScreen
メンバー関数をフレンドとして宣言できないのはなぜですか? 別のクラスのこのプライベート メンバー関数を使用するScreen
のではなく、その関数が独自のプライベート メンバーにアクセスできるようにするだけです。
クラス内でのみ使用することを意図している場合、relocateScreen
関数を公開することは悪い設計になる可能性があります。WindowMgr
同様に、他の場合にのプライベート メンバーにアクセスすることが意図されていない場合Screen
、 のフレンドを作成するWindowMgr
ことは悪い設計になる可能性があります。WindowMgr
ここでどこが間違っていますか?正しいアプローチは何ですか?私は自分を馬鹿にしていますか?
c++ - c++フレンド関数-istreamをオーバーロードする演算子>>
私の質問は、フレンド関数と、<<および>>のオーバーロードに関するものです。私の理解から、フレンド関数はプライベートメンバー変数に直接アクセスできる(そしてアクセスすべきである)と思いました。ただし、ここにある場合、コンパイラは、「get」関数を使用して各プライベート変数を取得したときにのみ、.cxxファイルを受け入れます。
これが私のヘッダーファイルです
これは、フレンド関数の実装を含む対応する.cxxファイルです。
したがって、この点で、上記のフレンド演算子は正しくコンパイルされました。ただし、私の演算子>>が1つのプライベート変数に直接アクセスできるのはなぜですか(>> bignum.digits [i])が、残りのプライベート変数は「getfunctions」で取得する必要があります
以下、この点でオーバーロード演算子を書き込もうとすると(フレンド関数がプライベート変数を適切に呼び出す必要があると私が考えた方法):
以下のエラーが発生します。
私が使用しているコンパイラはg++(バージョン3.3.1)です。どんな助けでもありがたいです、ありがとう。
改訂:
bignumオブジェクトがプライベート変数にアクセスできるようにコードを更新しました。フレンド演算子のオーバーロード<<に対して次のことを行い、正常にコンパイルされました。コメントありがとう、それは新人の間違いでした。
ただし、コンパイラはまだ>>演算子のエラーを生成しています
BigNum2.cxx:関数内std::istream&
csci2270_hw1B::operator>>(std::istream&, csci2270_hw1B::BigNum&)':
BigNum2.cxx:208: error: syntax error before
)'トークン
>>は数値を読み込むことになっており、プライベートメンバー変数'used'は配列の長さを記録することになっています。コンパイラがなぜ受け入れるのか、私はまだ少し混乱しています
とは対照的に:
何かご意見は?ありがとう。
c++ - 派生クラスは基本クラスのフレンド関数を使用できますか?
私がいくつかのクラスベーシスを持っていて、それから派生した場合、内部ベースには友達機能があります
派生クラスの内部にはそのような関数がないので、私の質問はメインの内部にあるかどうかです
なぜそれが機能するのですか?事前に!=のおかげでキャストするためのコンストラクターがありません。if(派生!= basic)を記述した場合、それは機能しますか?
c++ - このキー指向のアクセス保護パターンの名前は?
どうやらこのキー指向のアクセス保護パターン:
... はまだ名前が知られていないので、舌を折らずに参照できるように、適切な名前を見つけたいと思います。提案?
そのはず:
- 簡潔
- アクセス保護の意図を伝える
- 理想的には、プロキシが不要であることを意味します (?)