>  기사  >  백엔드 개발  >  C의 파생 클래스에서 기본 클래스 생성자와 할당 연산자를 어떻게 사용합니까?

C의 파생 클래스에서 기본 클래스 생성자와 할당 연산자를 어떻게 사용합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 08:33:02160검색

How do I use Base Class Constructors and Assignment Operators in Derived Classes in C  ?

C에서 기본 클래스 생성자와 할당 연산자 사용

객체 지향 프로그래밍에서 상속을 통해 클래스는 기본 클래스의 속성과 메서드를 상속받을 수 있습니다. 이 강력한 기능을 통해 코드 재사용 및 유지 관리가 가능해집니다. 그러나 상속된 클래스에서 생성자와 할당 연산자를 처리하는 것은 어려울 수 있습니다.

생성자 집합과 할당 연산자가 있는 클래스 B를 생각해 보세요. 목표는 foo()를 재정의하지만 B의 생성자와 할당 연산자를 유지하는 상속 클래스 D를 만드는 것입니다.

명시적 호출

이를 달성하는 한 가지 방법은 생성자와 할당 연산자를 명시적으로 호출하는 것입니다. 여기에는 D 인스턴스 생성 시 적절한 기본 클래스 생성자를 수동으로 호출하고 Base::operator=()를 사용하여 할당 연산자에 값을 할당하는 작업이 포함됩니다.

<code class="cpp">class Base {
  // ...
public:
  Base(const Base&) { /*...*/ }
  Base& operator=(const Base&) { /*...*/ }
};

class Derived : public Base {
  int additional_;
public:
  Derived(const Derived& d)
    : Base(d) // dispatch to base copy constructor
    , additional_(d.additional_)
  {
  }

  Derived& operator=(const Derived& d)
  {
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
};</code>

암시적 사용

흥미롭게도 생성자와 할당 연산자를 명시적으로 정의하지 않아도 컴파일러가 이를 자동으로 생성할 수 있습니다. 이는 상속이 간단하고 사용자 정의가 최소화된 클래스의 경우입니다.

<code class="cpp">class ImplicitBase { 
  int value_; 
  // No operator=() defined
};

class Derived : public ImplicitBase {
  const char* name_;
public:
  Derived& operator=(const Derived& d)
  {
    ImplicitBase::operator=(d); // Call compiler generated operator=
    name_ = strdup(d.name_);
    return *this;
  }
};  </code>

따라서 포괄적인 생성자 세트와 할당 연산자를 제공하는 기본 클래스에서 상속할 때 이를 해당 함수에 추가 기능이 필요하지 않은 한 파생 클래스를 다시 작성할 필요가 없습니다.

위 내용은 C의 파생 클래스에서 기본 클래스 생성자와 할당 연산자를 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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