파생 클래스를 가리키는 상위 클래스 포인터에서 새 메모리 위치가있는 새 파생 클래스 포인터를 가져 오려고합니다.다른 클래스를 기반으로하는 새 파생 형식 만들기
#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과 동일한 클래스 여야합니다.
지금은 보버 위브가 새로운 부모가됩니다. 현재 유형의 새 밥으로 바꿀 수있는 방법이 있습니까? 아니면 검색해야하는 특정 용어가 있습니까? 감사합니다.
이렇게 할 수 없습니다. '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- by-call-base-class) –