인터뷰에서이 질문을 받았습니다. 나는 거기에서 대답 할 수 없었다. 결과물이 왜 그런지 지금 당장은 알 수 없습니다.가상 함수 오버로드
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun (int x = 0)
{
cout << "Base::fun(), x = " << x << endl;
}
};
class Derived : public Base
{
public:
virtual void fun (float x = 10.0)
{
cout << "Derived::fun(), x = " << x << endl;
}
};
int main()
{
Derived d1;
Base *bp = &d1;
bp->fun();
d1.fun();
d1.fun(1.2);
return 0;
}
위의 코드의 출력은 다음과 같습니다 :
Base::fun(), x = 0
Derived::fun(), x = 10
Derived::fun(), x = 1.2
문제는 다음과 같습니다 코드 우리가 재미() 두 함수가 과부하 얻을 말 첫 번째 경우에 (그리고 그것들은 선언이 다르므로 덮어 쓰지 않는다.) 그리고 기본 fun()가 호출되지만, fun()의 선언은 오버로드된다 (선언문에 기본 인수가 포함되는지 여부 만 다르기 때문에).
void fun(int x = 0)
void fun(float x = 10.0)
이 함수는 오버로드되지 않습니다.
위의 두 경우 모두 모순이있는 것으로 보입니다.
상황을 설명하는 관련 기사/링크는 매우 유용 할 것입니다.
출력 결과가 어떠할 것이며 그 이유는 무엇입니까? – NathanOliver
첫 번째 경우 런타임의 다형성으로 인해 Derived :: fun(), x = 10.0이 출력되어야합니다. 두 번째 및 세 번째 경우에는 출력을 어떻게 결정합니까? –