>백엔드 개발 >C++ >파생 클래스를 알 수 없는 경우 C에서 다형성 개체를 심층 복사하는 방법은 무엇입니까?

파생 클래스를 알 수 없는 경우 C에서 다형성 개체를 심층 복사하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-02 02:28:10658검색

How to Deep Copy a Polymorphic Object in C   When the Derived Class is Unknown?

C에서 다형성 객체 복사

질문:

C에서 어떻게 깊은 정확한 파생 클래스가 있을 때 기본 클래스 인스턴스의 복사본이 생성됩니다. 알 수 없음?

정답:

가상 복제 방법 활용

다형성 객체를 효과적으로 전체 복사하려면 다음 접근 방식을 사용할 수 있습니다. 사용:

  1. 가상 Clone() 메서드를 정의합니다. 기본 클래스 Base.
  2. 각 파생 클래스에 Clone() 메서드를 구현하여 해당 파생 클래스의 새 인스턴스를 만들고 필요한 모든 데이터 멤버를 복사합니다.

공변 반환 유형 활용

그러나 более "C "가 있습니다. 접근 방식:

  1. 각 파생 클래스에 대한 복사 생성자를 정의합니다.
  2. 복사 생성자를 사용하여 해당 파생 클래스의 새 인스턴스를 반환하도록 각 파생 클래스의 Clone() 메서드를 재정의합니다. .

공변 반환의 예 유형:

class Base
{
public:
  virtual Base* Clone() = 0;
};

class Derivedn : public Base
{
public:
  // Call to copy constructor is implicit
  Derivedn* Clone()
  {
    return new Derivedn(*this);
  }

private:
  Derivedn(const Derivedn&) : ... {}
};

이 접근 방식은 간결하며 C의 다형성 원칙을 따릅니다. Clone() 메소드에서 명시적인 멤버 복사가 필요 없이 객체의 원활한 전체 복사가 가능합니다.

위 내용은 파생 클래스를 알 수 없는 경우 C에서 다형성 개체를 심층 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.