기본 클래스 포인터에서 파생 클래스 복사본 만들기
포인터에서 파생 클래스 인스턴스의 전체 복사본을 만드는 문제를 고려해보세요. 다형성 기본 클래스입니다. if 문에서 여러 유형 ID나 동적 캐스트에 의존하는 것은 지루하고 성능에 영향을 미칠 수 있으므로 이는 까다로울 수 있습니다.
선호되는 접근 방식은 기본 클래스 내에 clone()이라는 가상 메서드를 통합하는 것입니다. 또는 복사(). 이 메서드는 파생 클래스의 새로 생성된 복사본에 대한 포인터를 반환해야 합니다. 각 파생 클래스에서 이 메서드를 구현하면 복사 프로세스가 특정 파생 클래스 유형과 독립적이 됩니다.
또는 코드 중복을 피하기 위해 CRTP(Curiously Recurring Template Pattern) 관용구를 사용할 수 있습니다. 템플릿을 사용하면 복사 작업을 파생 클래스 생성자에 위임하는 도우미 클래스를 생성할 수 있습니다.
Clone() 메서드를 사용한 구현:
<code class="cpp">class Base { virtual Base* clone() const = 0; }; class Derived1 : public Base { Base* clone() const { return new Derived1(*this); } }; class Derived2 : public Base { Base* clone() const { return new Derived2(*this); } }; Base* CreateCopy(Base* base) { return base->clone(); }</code>
CRTP 관용구를 사용한 구현:
<code class="cpp">template <class Derived> class DerivationHelper : public Base { public: Base* clone() const { return new Derived(static_cast<Derived&>(*this)); } }; class Derived1 : public DerivationHelper<Derived1> { ... }; class Derived2 : public DerivationHelper<Derived2> { ... };</code>
위 내용은 기본 클래스 포인터에서 파생 클래스를 딥 카피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!