0
class A {...}  
class B : public A {...}  
class C : public A {...}  
void M(A* a) {
  A* aa = new B(* a)
  ...
}  
int main()  
{  
  B b = new B();  
  M(b);  
  ...
}  

だから私がしたいのは、それがタイプBかCかなどを知らなくても、Mに渡されるオブジェクト( "a")のコピーコンストラクターを呼び出すことです(上記の "new B(a)"の代わりに)。

もちろん、動的キャストを使用してnull ptrなどをチェックしたり、typeidを使用したりすることはできますが、もっと簡単な方法があるはずです。

前もって感謝します。

4

1 に答える 1

2

同じ効果を得る1つの方法は、clone()パターンを使用することです。クラスAに、それをコピーする仮想関数を与え、各サブクラスでその関数をオーバーライドします。Aのインスタンスを参照によって関数に渡し、次にcloneその関数内に渡します。少し厄介ですが、機能します。

于 2012-06-22T21:54:43.227 に答える