C에서 가상 함수를 사용하면 파생 클래스가 기본 클래스에 정의된 함수 구현을 재정의할 수 있습니다. 그러나 가상 함수의 기본 인수 동작은 혼란스러울 수 있습니다.
문제 설명:
다음 코드 조각을 고려하세요.
class B { public: B(); virtual void print(int data=10) { cout << endl << "B--data=" << data; } }; class D:public B { public: D(); void print(int data=20) { cout << endl << "D--data=" << data; } }; int main() { B *bp = new D(); bp->print(); return 0; }
예상 출력:
[ D--data=20 ]
실제 출력:
[ D--data=10 ]
설명:
C 표준(8.3.6.10)에 따르면, 포인터나 참조를 통해 가상 함수를 호출하면 기본 인수는 파생 클래스의 재정의 함수가 아닌 포인터나 참조의 정적 유형에서 파생됩니다.
이 경우 bp는 B 유형의 포인터입니다. 따라서 B::print의 기본 인수(10)가 사용되어 D::print의 기본 인수(20)를 재정의합니다.
따라서 출력은 다음과 같습니다. 예상되는 D--data=20 대신 D--data=10.
위 내용은 가상 함수의 기본 인수가 파생 클래스 대신 기본 클래스의 값을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!