예, C++ 가상 함수는 기본 매개변수를 가질 수 있습니다.
예시 코드
#include<iostream> using namespace std; class B { public: virtual void s(int a = 0) { cout<<" In Base \n"; } }; class D: public B { public: virtual void s(int a) { cout<<"In Derived, a="<<a; } }; int main(void) { D d; // An object of class D B *b = &d;// A pointer of type B* pointing to d b->s();// prints"D::s() called" return 0; }
출력
In Derived, a=0
이 출력에서 파생 클래스의 s()가 호출되고 기본 클래스 s()의 기본값이 사용됨을 관찰합니다.
기본 인수는 함수 서명에 참여하지 않습니다. 따라서 기본 클래스와 파생 클래스의 s() 서명은 동일한 것으로 간주되므로 기본 클래스의 s()가 재정의됩니다. 기본값은 컴파일 시 사용됩니다. 컴파일러가 함수 호출에서 인수가 누락된 것을 확인할 때 지정된 기본값을 대체합니다. 따라서 위의 프로그램에서 x의 값은 컴파일 타임에 대입되고 런타임에는 파생 클래스의 s()가 호출됩니다. 의 값은 컴파일 시 대체되고 런타임 시 파생 클래스의 s()가 호출됩니다.