インタビューでこの質問がありました。私はそこでこれに答えることができませんでした。それが今のところどうして私はそれを得ることができないのですか?仮想関数のオーバーロード
#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()の宣言がオーバーロードされることはできません。
void fun(int x = 0)
void fun(float x = 10.0)
これらの関数をオーバーロードすることはできません。
上記の両方のケースで矛盾があるようです。
状況を説明する関連記事/リンクが非常に役に立ちます。
出力は何であり、その理由は? – NathanOliver
最初のケースでは、実行時の多型性のため、出力はDerived :: fun()、x = 10.0になるはずです。 2番目と3番目のケースでは、どのように出力を決めるのですか? –