가상 함수 기본 인수 동작: 예상치 못한 수수께끼
이 코드 조각에서는 가상 함수 기본 동작과 관련된 딜레마가 발생합니다. 인수:
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에서 가상 함수 호출의 기본 인수가 객체를 나타내는 포인터 또는 참조의 정적 유형에 의해 결정된다고 규정합니다. 이 경우 print 함수는 B(bp) 유형의 포인터를 통해 호출되므로 B::print의 기본 인수가 활용되어 예상치 못한 출력이 발생합니다.
결론:
포인터나 참조를 통해 가상 함수를 호출할 때 기본 인수 동작을 신중하게 고려해야 합니다. 포인터 또는 참조의 정적 유형에 따라 사용되는 기본 인수가 결정되며, 이를 제대로 이해하지 못할 경우 예상치 못한 결과가 발생할 수 있습니다.
위 내용은 가상 함수 호출이 파생 클래스 대신 기본 클래스의 기본 인수를 상속하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!