我试图从指向派生类的父类指针获取一个新的派生类指针(带有新的内存位置)。
#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可以打印出什么样的bob打印件。 bobwannabe不应该指向与bob相同的对象,但应该与bob属于同一类。
现在,bobwannabe成为新的父母。有没有办法把它变成一个新的鲍勃与它的当前类型或是否有一个特定的术语我应该搜索? 谢谢!
答案 0 :(得分:1)
你想要的是克隆对象。您需要通过向父类添加虚拟克隆方法和复制构造函数来自己完成:
virtual parent * clone() const { return new parent(*this); }
并覆盖所有派生类,例如dev1
:
virtual parent * clone() const override { return new dev1(*this); }
并使用:
parent *bobwannabe = bob->clone();
另请参阅'typeid' versus 'typeof' in C++,不要忘记删除对象或使用智能指针。