Рассмотрим эту демонстрационную программу:
#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 :: obj.f ()
, поскольку производный класс не определяет его, что затем приведет к вызову Derived :: obj.f (0)
согласно определению в class Base.
Что я здесь делаю не так? Есть ли способ добиться этого? В частности, я бы хотел, чтобы вызов obj.f ()
возвращал 10.
(Также обратите внимание, что я понимаю, что могу использовать аргумент по умолчанию для решения этой проблемы, но этот код просто краткий пример моей проблемы, поэтому, пожалуйста, не говорите мне использовать аргументы по умолчанию.)
Спасибо.