Предположим, у меня есть такой код:
class Base {
public:
virtual int Foo(int) = 0;
};
class Derived : public Base {
public:
int Foo(int);
virtual double Foo(double) = 0;
};
class Concrete : public Derived {
public:
double Foo(double);
};
Если у меня есть объект типа Concrete, почему я не могу вызвать Foo (int)?
Если я изменю имя Foo (double), чтобы оно не перегружало Foo, тогда все в порядке, и оба метода доступны, но это не то, что я хочу.
Точно так же, если я удалю класс Concrete и реализую Foo (double) в Derived, тогда оба будут доступны, но опять же, не то, что я хочу.