派生クラスを指す親クラスポインタから新しい派生クラスポインタ(新しいメモリ位置を持つ)を取得しようとしています。別のクラスに基づいて新しい派生型を作成する
#include <iostream>
#include <random>
class parent{
public:
virtual void print(){
printf("p\n");
}
};
class dev1: public parent{
public:
void print(){
printf("d1\n");
}
};
class dev2:public parent{
public:
void print(){
printf("d2\n");
}
};
int main(int argc, const char * argv[]) {
srand(time(NULL));
parent*bob;
if(rand()%2){
bob = new dev1();
}else{
bob = new dev2();
}
bob->print();
parent * bobwannabe;
bobwannabe = new typeof(*bob);
bobwannabe->print();
return 0;
}
私はbobwannabeがプリントをボブどのような印刷し期待していました。 bobwannabeはbobと同じオブジェクトを指すべきではありませんが、bobと同じクラスでなければなりません。
今、bobwannabeは新しい親になります。現在のタイプの新しいボブに変換する方法はありますか、特定の用語がありますか? ありがとうございました!
これはできません。 'new'ステートメントの型は静的です。意味、それはコンパイル時に知られていなければなりません。クローン機能は、以下の回答に概説されているように、あなたの問題に対する一般的な解決策です。 –
検索しましたか?例えば[ポインタから多型ベースクラスへの派生クラスインスタンスのコピー/作成方法](https://stackoverflow.com/questions/5731217/how-to-copy-create-derived-class-instance-from-a- polymorphic-base-c)/ [派生C++クラスはどのようにしてベースポインタを介してクローンを作成できますか?](https://stackoverflow.com/questions/3136646/how-can-a-derived-c -class-clone-itself-via-a-base-pointer)/ [C++は基本クラスを呼び出して派生クラスをエレガントに複製する](https://stackoverflow.com/questions/36189838/c-elegantly-clone-derived-class- –