가상 함수 기본 인수 동작
제공된 C 코드에서 가상 함수 오버로딩 및 기본 인수와 관련하여 이상한 상황이 발생합니다. 문제를 살펴보고 기본 메커니즘을 이해해 보겠습니다.
코드는 B와 D라는 두 클래스를 정의합니다. 여기서 B에는 기본 인수가 10인 가상 인쇄 메서드가 있고 D는 다른 기본 인수인 20으로 인쇄를 재정의합니다. . D 유형의 객체를 가리키는 B 유형의 포인터를 통해 print를 호출하면 "D--data=20"이라는 예상 출력이 얻어지지 않습니다. 대신 출력에는 "D--data=10"이 표시됩니다.
C 표준(8.3.6.10)에 따르면 가상 함수 호출은 포인터 또는 참조의 정적 변수에 의해 결정된 선언에 정의된 기본 인수를 사용합니다. 유형. 이는 print가 B 포인터를 통해 호출될 때 D에서 재정의되었음에도 불구하고 B에서 기본 인수를 상속한다는 것을 의미합니다.
설명은 기본값을 결정하는 포인터의 정적 유형(B)에 있습니다. 가상 함수 호출 중에 사용되는 인수입니다. 가리키는 개체가 D 유형이더라도 포인터의 유형에 따라 기본 인수 동작이 결정됩니다.
따라서 원하는 출력 "D--data=20"을 얻으려면 print를 호출하는 데 사용되는 포인터가 필요합니다. 재정의된 기본 인수를 사용하려면 D 유형이어야 합니다.
위 내용은 가상 함수 호출이 파생 클래스 대신 기본 클래스의 기본 인수를 상속하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!