consideran este programa de demostración:métodos virtuales puros 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
}
Lo que me da el siguiente error de compilación:
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)
Mi esperanza era que una llamada a obj.f()
resultaría en una llamada a Base::obj.f()
desde la clase derivada no la define, lo que daría como resultado una llamada a Derived::obj.f(0)
según la definición en la clase Base.
¿Qué estoy haciendo mal aquí? ¿Hay alguna manera de lograr esto? Específicamente, me gustaría llamar a obj.f()
para devolver 10.
(También tenga en cuenta que me doy cuenta de que podría usar un argumento predeterminado para resolver esto, pero este código es simplemente un ejemplo conciso de mi problema, así que por favor 'dime que use argumentos predeterminados.)
Gracias.
La función 'f' en' Derived' 'oculta' las otras funciones, definidas en' Base'. Es por eso que obtiene este error –
engañado de http://stackoverflow.com/questions/585913/c-member-function-virtual-override-and-overload-at-the-same-time –
@Kiril Kirov, usted gana - - Si quiere responder esto, lo marcaré como correcto. Agregando explícitamente 'using Base :: f;' en la definición de clase Derivada se solucionó. ¡Gracias! – jedwards