가상 함수의 생성자 호출
C에서 생성자는 객체 초기화를 담당합니다. 그러나 파생 클래스 및 가상 함수를 처리할 때 즉각적으로 직관적이지 않을 수 있는 특정 동작이 발생할 수 있습니다.
다음 예를 고려하세요.
#include <iostream> struct base { virtual const int value() const { return 0; } base() { std::cout << value() << std::endl; } virtual ~base() {} }; struct derived : public base { virtual const int value() const { return 1; } }; int main(void) { derived example; }
이 예에는 기본이 있습니다. 가상 함수 값()이 있는 클래스 기반입니다. 파생 클래스는 base에서 상속되고 value()를 재정의합니다. base의 생성자는 해당 생성자 내에서 value()를 호출하려고 시도합니다.
derived의 생성자가 호출되면 base의 생성자가 먼저 호출됩니다. 이 시점에서 객체는 여전히 기본 클래스의 상태에 있으며 value()는 기본 클래스의 구현을 확인합니다. 이것이 프로그램이 예상된 "1" 대신 "0"을 인쇄하는 이유입니다.
이 문제를 해결하려면 생성자에서 value()를 호출하기 전에 개체가 파생 클래스로 완전히 초기화되었는지 확인해야 합니다. . 이를 달성하는 한 가지 방법은 파생 클래스 생성자가 실행될 때까지 value() 호출을 지연하는 것입니다. 이는 파생 클래스 생성자의 가상 함수를 사용하여 수행할 수 있습니다.
위 내용은 기본 클래스 생성자에서 가상 함수를 호출하면 파생 클래스 값이 아닌 기본 클래스 값이 인쇄되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!