>  기사  >  백엔드 개발  >  가상 함수 호출이 파생 클래스 대신 기본 클래스의 기본 인수를 상속하는 이유는 무엇입니까?

가상 함수 호출이 파생 클래스 대신 기본 클래스의 기본 인수를 상속하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-09 11:46:02449검색

Why Does a Virtual Function Call Inherit Default Arguments from the Base Class Instead of the Derived Class?

가상 함수 기본 인수 동작

제공된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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