Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 생성자 내부에서 가상 함수를 호출하는 방법은 무엇입니까?


생성자 또는 소멸자에서 가상 함수를 호출하는 것은 위험하므로 가능하면 피해야 합니다. 호출한 가상 함수는 파생 클래스가 아닌 기본 클래스에서 호출되기 때문입니다.

C++에서 모든 클래스는 고유한 구성을 입력하기 전에 가상 메소드 테이블의 버전을 빌드합니다. 따라서 생성자에서 가상 메서드를 호출하면 기본 클래스의 가상 메서드가 호출됩니다. 또는 해당 수준에서 구현이 없는 경우 순수한 가상 메서드 호출을 생성합니다. Base가 완전히 생성되면 컴파일러는 Derived 클래스 빌드를 시작하고 Derived 클래스의 구현을 가리키도록 메서드 포인터를 재정의합니다. 예를 들어 코드가 있는 경우 -

예시

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

출력

이것은 출력을 제공합니다 -

Base