> 백엔드 개발 > C++ > 가상 함수의 기본 매개변수가 파생 클래스를 상속합니까?

가상 함수의 기본 매개변수가 파생 클래스를 상속합니까?

Barbara Streisand
풀어 주다: 2024-11-26 14:15:11
원래의
188명이 탐색했습니다.

Do Default Parameters in Virtual Functions Inherit to Derived Classes?

가상 함수에 기본 매개변수가 있을 수 있나요?

문제:

가상 함수를 선언할 때 기본 클래스의 기본 매개변수를 사용하면 파생 클래스가 이러한 매개변수를 상속합니까? 기본값?

답변:

아니요, 가상 함수의 기본값은 파생 클래스에서 상속되지 않습니다. 사용되는 기본값은 함수가 호출될 때 개체의 정적 유형에 따라 결정됩니다.

설명:

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿