9

私は初心者レベルのオブジェクト指向プログラミング愛好家です。次のパズルに遭遇しました。

class A { 
}; 

class B { 
protected: 
    friend class A; 
};

class C { 
public: 
    friend class B; 
};

上記のサンプル コードを参照して、上記のクラスにデータ メンバーがあると仮定すると、A のメンバーの宣言で使用できる C のメンバーの名前は何ですか?

  1. プライベート会員のみ

  2. 保護されたメンバーのみ

  3. C のすべてのデータ メンバー

  4. 一般会員のみ

  5. Cのデータメンバーなし*

友情は推移的ではないため、私の選択は回答 4 です。したがって、A は B の友人ですが、A は C の友人ではありません (B が C の友人であっても)。それは正しい考え方ですか?

また、私の問題は、これまで(チュートリアルで)友情が次のように宣言されている例に出会ったことです。

class X { 
public: 
    friend class Y;
};

public 指定子の代わりに保護された指定子を使用した場合の違いは何ですか? そのように:

class X { 
protected: 
    friend class Y; 
};
4

1 に答える 1

7
  1. あなたは正しいです。友情は推移的ではなく、継承されません。
  2. friendどのアクセス指定子の下に宣言しても違いはありません。

classA自体が class のフレンドとして宣言されていない限りC。の保護されたメンバーまたはプライベート メンバーにアクセスすることはできませCA

于 2013-01-17T12:21:45.000 に答える