1

「A」というクラスがあり、それから派生した2つのクラスがある場合、「B」と「C」と言うことができます。どちらがどちらかわからない、BとCの両方の新しいインスタンスを作成するにはどうすればよいですか。これはおそらく紛らわしいように聞こえるので、私のものと同様のコードを明確にして使用させてください。

基本クラス:

class A {
    stuff...
}

派生クラス:

class B : A{
    stuff...
}

class C : A {
    stuff...
}

それから私が持っている他のクラスで:

class Z {
    void Derp() {
        foreach(A classA in listOfA's) {
            create new instance of derived class
        }
    }
}

私は単純に言うことはできませんB = new B()C = new C()おそらくBがリストにまったく含まれていないか、リストに3つのBと1つのAがあるためです。確かにそれを行う方法はいくつかありますが、そうでない場合は、次のようなswitch-caseステートメントを使用できます。

class Z {
    void Derp() {
        foreach(A classA in listOfA's) {
            switch(classA) {
                case is B:
                    B = new B();
                    break;
                case is C:
                    C = new C();
                    break;
                }
            }
        }
    }
}

クラスAから派生する新しいクラスを作成するたびに、そこに別のcaseステートメントを追加することを忘れないようにする必要があるため、必要な場合を除いて、この方法は避けたいと思います。

では、これをどのように行う必要がありますか?

ありがとう。

4

1 に答える 1

0

これに対する一般的なC++ソリューションは、いわゆる仮想コンストラクタイディオムcloneです。基本クラスで呼び出される仮想関数を定義し、AそれをオーバーライドしてBの新しいインスタンスをB返しC、で新しいインスタンスを返しますC

クローンの代わりに空白のインスタンスが必要な場合newInstanceは、デフォルトのコンストラクターを使用する関数を追加できます。

于 2012-06-20T17:35:24.707 に答える