1

重複の可能性:
C++ で「friend」を使用する必要があるのはいつですか?

ここSOでは、関数/クラスを別のクラスの友達にすることを推奨している人がたくさんいますが、他の選択肢があります。C++ では、friend を控えめに使用するべきではありませんか? フレンド機能の使用を決定する前に、他のオプションを検討する必要があると思います。意見/提案は大歓迎です。

4

5 に答える 5

3

具体的な例がなければ、これを判断するのは困難です。friend厳密には必要ではありませんが、用途があります。あなたが主張するように、より良い代替手段がある場合は、「より良い」という言葉の単純な定義により、明らかにそれらを使用します。あるいは、どちらのソリューションが優れているかという決定は、結局のところそれほど明確ではないかもしれません。

個人的には、可能な限りそれを避けることを好みますが、メソッドの複製よりも使用することをprint好みoperator <<ますfriend

于 2009-04-09T12:58:02.230 に答える
1

友人がカプセル化に違反していると思うすべての人のために、ここにBjarneStroustupが言わなければならないことがあります。

でも、やむを得ない場合を除いて、個人的には友達を使いません。イテレータパターンの実装のようなシナリオ には、他に選択肢はありません。

友達は、適切に使用されれば友達であり、そうでなければ敵です!

于 2009-04-09T13:02:12.407 に答える
0

フレンド関数は、クラスのメンバーにアクセスする必要があるサードパーティのライブラリ関数を呼び出したい場合に有利です。たとえば、次のことを考慮してください。

class A {
private:
     int x,y;
     double result;
public:
     friend void *power(void *x);
}

これで、このフレンド関数を使用してmath.hにあるpow関数を呼び出すことができます。これで、べき関数は次のように定義できます。

void *power(void *X)
{
     A *a;
     a = static_cast< A *> (X);
     a->result = pow(a->x,a->y);
     return NULL;
}
pow関数を呼び出す簡単な方法がありますが、この例は、ライブラリ関数を呼び出す際のフレンド関数の重要性を説明することのみを目的としています。お役に立てば幸いです。

于 2009-08-24T13:11:29.747 に答える