Чистые виртуальные методы C ++

Рассмотрим эту демонстрационную программу:

#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.

(Также обратите внимание, что я понимаю, что могу использовать аргумент по умолчанию для решения этой проблемы, но этот код просто краткий пример моей проблемы, поэтому, пожалуйста, не говорите мне использовать аргументы по умолчанию.)

Спасибо.

5
задан Kara 29 June 2013 в 00:01
поделиться