我在面試中被問到這個問題。我無法在那裏回答這個問題。我現在也無法得知它,爲什麼產量是這樣。 下面是代碼:虛擬功能的超載
#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。在第二和第三種情況下,你如何決定輸出? –