가상 함수에 기본 매개변수가 있을 수 있나요?
문제:
가상 함수를 선언할 때 기본 클래스의 기본 매개변수를 사용하면 파생 클래스가 이러한 매개변수를 상속합니까? 기본값?
답변:
아니요, 가상 함수의 기본값은 파생 클래스에서 상속되지 않습니다. 사용되는 기본값은 함수가 호출될 때 개체의 정적 유형에 따라 결정됩니다.
설명:
C 표준(C 03 및 C 11)에서는 다음과 같이 지정합니다. 가상 함수 호출은 함수를 호출하는 데 사용되는 포인터나 참조의 정적 유형에 따라 결정되는 함수 정의에 선언된 기본 인수를 사용합니다. function.
예:
다음 코드를 고려하세요.
struct Base { virtual void f(int a = 7); }; struct Der : public Base { void f(int a); };
Base 객체에 대한 포인터를 통해 f()를 호출할 때, 기본값 7이 사용됩니다:
Base* pb = new Base; pb->f(); // uses the default 7
그러나 포인터를 통해 f()를 호출하는 경우 Der 객체인 경우 파생 클래스의 기본값은 사용되지 않습니다.
Der* pd = new Der; pd->f(); // error: no default argument for this function
연습 및 컴파일러 고려 사항:
C 표준에 따라 동작이 지정되지만 일부 컴파일러에서는 가상 함수 기본 매개변수를 다르게 구현합니다. 그러나 컴파일러 전체에서 일관된 동작을 보장하려면 표준 지침을 따르는 것이 좋습니다.
코드 데모:
다음 코드는 기본 매개변수 동작을 보여줍니다.
struct Base { virtual string Speak(int n = 42); }; struct Der : public Base { string Speak(int n = 84); }; int main() { Base b1; Der d1; Base *pb1 = &b1, *pb2 = &d1; Der *pd1 = &d1; cout << pb1->Speak() << "\n" // Base 42 << pb2->Speak() << "\n" // Der 42 << pd1->Speak() << "\n" // Der 84 << endl; }
출력:
Base 42 Der 42 Der 84
위 내용은 가상 함수의 기본 매개변수가 파생 클래스를 상속합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!