【发布时间】:2018-05-22 05:03:05
【问题描述】:
我正在尝试从指向派生类的父类指针中获取新的派生类指针(带有新的内存位置)。
#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 成为新父母。有没有办法将它变成一个具有当前类型的新鲍勃,或者我应该搜索一个特定的术语? 谢谢!
【问题讨论】:
-
这是不可能的。
new语句中的类型是静态的。意思是,它必须在编译时知道。如下答案所述,克隆功能是解决您的问题的流行解决方案。