0

他の人のコードを見ていて、理解できない部分を見つけました。

class a {
   public:
   function xxx () {.....}
}

class b : public a {
   public:
       xxxx
   protected:
       constructor()....

       friend class a ;            <=  here why it is needed ????

}

私が理解しているように、bはすでにaから継承されているため、aの機能を直接使用できるはずです。この「友達」宣言の目的は何ですか?

4

5 に答える 5

1

は のメソッドを使用friendできますが、その逆は暗黙的ではありません。ab

設計は怪しく見えますが、基本クラスは派生クラスを気にするべきではありません。

于 2013-11-05T09:23:02.267 に答える
0

これはほぼ確実に、重大な設計上の問題があることを意味します。継承の基本的な経験則の 1 つは、基本クラスは派生クラスに関する情報を必要としないということです。のフレンドab作成すると、 のメンバー関数がオブジェクトaの内部にアクセスできるようになりbます。

于 2013-11-05T13:11:11.440 に答える
0

プロジェクトや要件に応じて、クラスのデザインは変わります。あなたのクラス階層についてはコメントしませんが、あなたの質問はすべて友達の使い方の理論に関するものです。フレンドを使わないと、AからBメンバーを呼び出すことができなくなります。

于 2013-11-05T09:59:34.730 に答える
0

friend class a;aの非公開メンバーにアクセスする権利をクラスに付与しますb。したがって、この小さな例では、 のインスタンスがaを呼び出すことができますb::constructor()。友情がなければ、それは不可能です。

a理由については、 のインスタンスを呼び出す必要があること以外に、それに答えるのに十分な情報がありませんb::constructor()(現在の構文エラー以外のものであると仮定します)。

于 2013-11-05T09:24:27.437 に答える