다형성 기본 클래스 포인터에서 파생 클래스 인스턴스 생성
객체 지향 프로그래밍에서는 파생 클래스 인스턴스를 복사하거나 생성해야 하는 경우가 많습니다. 포인터에서 다형성 기본 클래스로의 클래스. 그러나 여러 파생 유형이 존재하는 경우 이 작업이 어려울 수 있습니다.
if 문에서 여러 유형 ID 또는 동적 캐스트를 사용하여 각 유형을 확인한 다음 새로운 유형을 사용하는 순진한 접근 방식은 비효율적이고 오류가 발생하기 쉽습니다. 더 나은 해결책은 기본 클래스에서 가상 메소드를 사용하여 복사본을 생성하는 것입니다.
Virtual clone() 메소드
가상 클론( ) 메서드를 기본 클래스에 포함하고 이를 각 파생 클래스에 구현하면 파생 클래스 인스턴스의 복사본을 동적으로 생성할 수 있습니다. clone() 메서드는 새로 생성된 복사본에 대한 포인터를 반환해야 합니다.
<code class="cpp">class Base { virtual ~Base(); // Returns a dynamically created copy of this object virtual Base* clone() const = 0; };</code>
<code class="cpp">class Derived1 : public Base { // Implements the clone() method for Derived1 virtual Base* clone() const { return new Derived1(*this); } };</code>
<code class="cpp">class Derived2 : public Base { // Implements the clone() method for Derived2 virtual Base* clone() const { return new Derived2(*this); } };</code>
이 접근 방식을 사용하면 파생 클래스 인스턴스의 복사본을 생성할 수 있습니다.
<code class="cpp">Base* basePtr = new Derived1(); Base* copyPtr = basePtr->clone();</code>
미니멀 구현을 위한 CRTP 관용구
clone() 메서드를 각 파생 클래스에서 사용하려면 CRTP(Curiously Recurring Template Pattern) 관용구를 사용할 수 있습니다.
<code class="cpp">template <class Derived> class DerivationHelper : public Base { public: virtual Base* clone() const { return new Derived(static_cast<const Derived&>(*this)); } };</code>
<code class="cpp">class Derived1 : public DerivationHelper<Derived1> { // Other members... };</code>
<code class="cpp">class Derived2 : public DerivationHelper<Derived2> { // Other members... };</code>이 접근 방식은
clone() 메서드를 자동으로 구현합니다. 복사 생성자가 올바른 유형에 대해 호출되는지 확인하면서 각 파생 클래스에서.
위 내용은 다형성 기본 클래스 포인터에서 파생 클래스 인스턴스를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!