我在面试中被问到这个问题。我无法在那里回答这个问题。我现在也无法得知它,为什么产量是这样。 下面是代码:虚拟功能的超载
#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。在第二和第三种情况下,你如何决定输出? –