8

タイトルはすでにたくさん言っています、

しかし、基本的に私がやりたいことは次のとおりです(例):

次のように、Aというクラスと、Bという名前の中に別のクラスがあります。

class A
{
   int a;

   class B
   {
      void test()
      {
         a = 20;
      }
   };
};

ご覧のとおり、私の目標は、クラスBがネストされたクラスであるため、クラスAにアクセスできるようにすることです。BはAにアクセスできないため、これは機能しませんが、どうすればアクセスできますか?

ありがとうございました

4

5 に答える 5

12

A内でクラスBを宣言したにもかかわらず、クラスAとBは完全に独立しています。唯一の違いは、Bを参照するには、A::Bを実行する必要があることです。

BがAのものにアクセスするには、構成または継承を使用する必要があります。構成については、次のように、BにAのオブジェクトへの参照を与えます。

class B {
public:
  B(const A& aObj) : aRef(aObj) {
    cout << aRef.a << endl;
  }
private:
  const A& aRef;
};

継承の場合、次のようになります。

class B: public A { // or private, depending on your desires
  B() {
    cout << a << endl;
  }
}
于 2012-10-11T21:49:54.053 に答える
2

内部クラスは、Javaの場合のように、C++の外部クラスとは関係ありません。のインスタンスがオブジェクトA::Bのメンバーにアクセスするには、ネストされたクラスではないかのように、どこかにインスタンスが必要です。のインスタンスには、 ;の暗黙のインスタンスはありません。インスタンスがまったく存在しない状態で、のインスタンスを多数持つことができます。AABA::BAA::BA

Aのインスタンスをに渡し、testそれを使用してaメンバーにアクセスします。

void test(A& a_instance)
{
  a_instance.a = 20;
}
于 2012-10-11T21:49:31.027 に答える
1

クラスはタイプであり、タイプにはデータがありません。インスタンスにはデータがありますが、のインスタンスにAは(この例では)のインスタンスが含まれていませんB。また、のインスタンスには、のインスタンスBに関する知識がありませんA

于 2012-10-11T21:49:44.287 に答える
0

選択肢

  • に含まれるのではなくB、の子になるAA
  • Bコンストラクターに、Aそれを作成したインスタンスへの参照を取得させます(推奨)

さて、変数aがプライベートである場合、これはまだ役に立ちません。アクセサーまたは友達関係が必要になります。

于 2012-10-11T21:51:24.600 に答える
-1

C ++のネストされたクラスは、Javaのネストされたクラスとは異なり、Aのインスタンスに属していませんが、静的です。したがって、その時点では存在しません

于 2012-10-11T21:49:22.027 に答える