2

わかりました、私はこれに完全に困惑しています。コードが画面の周りを泳ぎ始めます...スリープする必要があります。

そう!わかりました、ネストされたクラスと友達に悩まされています。

ここに疑似コードがあります

   class A{
     public:
          //constructor
          // member functions
     private:
          class B{
          //private
          int a();
          };

          class C{
          //private
          int b();
          };
   };

したがって、タイプ A のオブジェクトが作成されたら、a() および b() にアクセスしたいと思います。これにはフレンド機能を使用する必要があることを知っています。では、フレンド クラス A をどこに配置すればよいでしょうか。それは正しい表現でしょうか。

4

1 に答える 1

2

クラス内からアクセスa()したい場合は、宣言を classおよび class内に配置する必要があります。ただし、andはクラスのメンバーではないため、あなたが考えている方法でそれらにアクセスすることはできません。代わりに、転送機能も に追加する必要があります。b()AfriendBCa()b()AA

class A
{
public:
    //constructor
    // member functions
private:
    class B
    {
        //private
        int a();

        friend A;    // <-- make A a friend
    };

    class C
    {
        //private
        int b();

        friend A;    // <-- make A a friend
    };

public:

    // forwarding function for a
    int a()
    {
        return bdata_.a();
    }

    // forwarding function for b
    int b()
    {
        return cdata_.b();
    }

private:
    B bdata_;
    C cdata_;
};
于 2013-05-29T05:23:38.663 に答える