0

次のコードを検討してください。

Class A
{
   int a;
   somepointer* b;
}
Class B : A
{
   void func()
}
main()
{
   A* a1 = new A();
   a1->a = 5;
   a1->b = new somepointer();
   B* b1 = new B()
}

B が作成されたときに A が含まれている場合、以前に作成した a1 を再利用したい、つまり b1->a は値 5 を指定する必要があります。これを行うにはどうすればよいですか?

4

2 に答える 2

1

すべてのインスタンスには独自の変数があります。a1から のメンバーにアクセスすることはできませんb1

あなたのコードには多くの問題があり、あなたのようなポインターを使用する一般的なアプローチは C++ に適合しません (Java のように見えます)。

C++ に関する優れた本を入手して、最初からやり直すことをお勧めします。試行錯誤によって C++ を学習することは、最善の方法ではありません。

于 2013-10-29T02:15:27.153 に答える
1

あなたが望むもののプロトタイプを提供していると思います。したがって、構文の問題については無視します。

タイプ A の変数をパラメーターとして受け取るクラス B のコンストラクターを作成できます。

class B:A {
public:
    B(A *my_a) {
        a = my_a->a;
        b = my_a->b;
    }

    void func() {
        //......
    }
}


main() {
    A *a1 = new A();
    a1->a = 5;
    a1->b = new somepointer();
    b = new B(a);
}

動的キャストについても考えることができます:派生クラスへの C++ キャスト。しかし、残念ながらそれは機能しません。再利用に必要な変数を手動で設定できるように、コンストラクターを用意するのが最善の方法です。

編集: Humayara Nazneen は、a1->b を変更しても b->b に影響しないという効果を望んでいるため、A::b をポインターとして宣言しないでください。つまり、次のことを意味します。

class A {
   int a;
   somepointer b;
}

b = my_a->b; を割り当てると、値によってコピーされます。

于 2013-10-29T02:24:24.867 に答える