このデモプログラムを検討してください。
#include <stdio.h>
class Base
{
public:
virtual int f(int) =0;
virtual int f(){ return f(0); }
virtual ~Base(){ }
};
class Derived : public Base
{
public:
int f(int i)
{
return (10 + i);
}
};
int main(void)
{
Derived obj;
printf("%d\n", obj.f(1)); // This works, and returns 11
printf("%d\n", obj.f()); // Adding this line gives me the error listed below
}
これにより、次のコンパイルエラーが発生します。
virtualfunc.cpp: In function ‘int main()’:
virtualfunc.cpp:25:26: error: no matching function for call to ‘Derived::f()’
virtualfunc.cpp:15:9: note: candidate is: virtual int Derived::f(int)
私の望みは、派生クラスがそれを定義していないので、obj.f()への呼び出しがへの呼び出しになり、それがクラスBaseの定義ごとにへの呼び出しになることでした。Base::obj.f()Derived::obj.f(0)
私はここで何が間違っているのですか?これを達成する方法はありますか?obj.f()具体的には、への呼び出しで10を返したいのですが。
(これを解決するためにデフォルトの引数を使用できることにも注意してください。ただし、このコードは私の問題の簡潔な例にすぎないため、デフォルトの引数を使用するように言わないでください。)
ありがとう。