> 백엔드 개발 > C++ > C 상속에서 생성자와 소멸자는 어떻게 호출됩니까?

C 상속에서 생성자와 소멸자는 어떻게 호출됩니까?

Patricia Arquette
풀어 주다: 2024-11-29 04:10:09
원래의
296명이 탐색했습니다.

How are Constructors and Destructors Called in C   Inheritance?

상속 시 생성자 및 소멸자 호출 순서

상속을 사용하는 객체 지향 프로그래밍에서는 생성자 및 소멸자 호출 순서를 이해하는 것이 중요합니다. . 이는 여러 기본 클래스와 객체 구성을 처리할 때 특히 중요합니다.

다음 클래스 계층 구조를 고려하세요.

struct A {
    A() { cout << "A() C-tor" << endl; }
    ~A() { cout << "~A() D-tor" << endl; }
};

struct B : public A {
    B() { cout << "B() C-tor" << endl; }
    ~B() { cout << "~B() D-tor" << endl; }

    A a;
};
로그인 후 복사

기본 기능에서:

int main() {
    B b;
}
로그인 후 복사

여기 이 상속 계층 구조에서 생성자와 소멸자 호출의 순서를 관리하는 규칙은 다음과 같습니다.

생성자 호출:

  1. 기본 클래스 구성: 생성자 호출은 기본 클래스에서 시작됩니다. 이 경우 A의 생성자가 먼저 호출됩니다.
  2. 멤버 필드 구성: 다음으로 멤버 필드는 파생 클래스에 선언된 순서대로 구성됩니다. 이 경우 A 유형의 B 필드 a가 생성됩니다.
  3. 파생 클래스 생성: 마지막으로 파생 클래스 B의 생성자가 호출됩니다.

소멸자 호출:

소멸자 호출 순서는 반대입니다. 생성자 호출 순서:

  1. 파생 클래스 소멸자: 파생 클래스의 소멸자 B가 먼저 호출됩니다.
  2. 멤버 필드 소멸자 : 다음으로 멤버 필드 a의 소멸자가 호출되어 해당 인스턴스를 파기합니다. A.
  3. 기본 클래스 소멸자: 마지막으로 기본 클래스의 소멸자 A가 호출됩니다.

기본 초기화 목록:

명시적으로 정의된 초기화 목록이 없더라도 멤버 필드는 파생 클래스보다 먼저 초기화됩니다. 생성자가 호출됩니다. 이 경우 a는 A의 기본 생성자로 초기화됩니다.

따라서 기본 함수의 코드에 대한 예상 출력은 다음과 같습니다.

A() C-tor
A() C-tor
B() C-tor
~B() D-tor
~A() D-tor
~A() D-tor
로그인 후 복사

위 내용은 C 상속에서 생성자와 소멸자는 어떻게 호출됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿