我试图从指向派生类的父类指针中获取一个新的派生类指针(具有新的内存位置)。
#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成了一个新的父母。有没有办法把它变成一个新的鲍勃与它的当前类型,或有一个特定的术语,我应该搜索?谢谢!
发布于 2017-12-08 01:45:43
你想要的是克隆这个对象。您需要通过添加一个虚拟克隆方法并将构造函数复制到父类来实现这一点:
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++,不要忘记删除对象或使用智能指针。
https://stackoverflow.com/questions/47706074
复制