-1
私は3つのクラスを持っています。今コピーコンストラクタと継承
class A
{
private:
int num;
//...
// THIS IS AN ABSTRACT CLASS (has a pure virtual function)
}
class B : public A
{
private:
float fnum;
//...
}
class C : public A
{
private:
double dnum;
//...
}
、私はそのタイプ(B
又はC
)に従ってA*
オブジェクトを初期化したい機能
foo(A& someA)
とその中を持っています。このA
は元々はB
またはC
とすることができます。どのようにコピーコンストラクタを使用してそれを行うことができますか?私はこのようなものがあります:
A* newA = A.isB ? new B(someA) : new C(someA)
をし、私のようなコピーコンストラクタを追加しました:
B(const B& b) : A(b) { fnum = b.fnum; }
C(const C& c) : A(c) { dnum = c.dnum; }
をしかし、もちろん、これは行でエラーがスローさがあることを
A* newA = A.isB ? new B(someA) : new C(someA)
適切なコンストラクタはありません。
プロトタイプのデザインパターン(例:https://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns/Creational_Patterns#Prototype)を見てください。 – Leon