C++ : Problemas con la herencia cuando hay sobrecarga de miembros
Os muestro un sencillo tip muy brevemente. Si estás utilizando sobrecarga de funciones miembro en una clase base e intentas heredar dichos miembros en una clase derivada observarás que esta última no tiene visibilidad de todas las sobrecargas realizadas. Pongamos un ejemplo muy sencillo:
#include <iostream>
using namespace std;
class base
{
public:
void A(int x) { A(x, 5); }
virtual void A(int x, int y) = 0;
};
class derived : public base
{
public:
//using base::A;
void A(int x, int y) { cout << "x+y = " << x+y << endl; }
};
int main()
{
derived var;
var.A(3);
}
Al intentar compilar este código nos vamos a encontrar con que el compilador nos lanza el siguiente error:
file.cpp: In function ‘int main()’: file.cpp:21: error: no matching function for call to ‘derived::A(int)’ file.cpp:15: note: candidates are: virtual void derived::A(int, int)
Para solucionar este problema podemos hacer uso de la palabra clave using (descomentar la línea 14) que nos permite tener visibilidad de todas las sobrecargas de dicha función en nuestra clase derivada.
I present you a short tip very quickly. If you are using overload of function members in a base class and you try to inherit these members to a derived class you will observe that this last doesn’t have visibility for all the overloads performed. Here, there is a very simple example:
#include <iostream>
using namespace std;
class base
{
public:
void A(int x) { A(x, 5); }
virtual void A(int x, int y) = 0;
};
class derived : public base
{
public:
//using base::A;
void A(int x, int y) { cout << "x+y = " << x+y << endl; }
};
int main()
{
derived var;
var.A(3);
}
When you try to compile this code, the compiler throws the following error:
file.cpp: In function ‘int main()’: file.cpp:21: error: no matching function for call to ‘derived::A(int)’ file.cpp:15: note: candidates are: virtual void derived::A(int, int)
In order to solve this problem you can use the reserved keyword using (un-commenting the line 14) that let us to have visibility of all overloads of such function in the derived class.
loading...




loading...
Muy interesante… y me parece grandiosa la idea de publicar los post tambien en ingles…
loading...
Gracias ! Lo del inglés es más por necesidad de aprender que por otra cosa, pero bueno espero también que de esta forma aumente el número de visitas al blog
.
loading...
mmm que interesante. En alguna ocasión tuve un problema asi y no supe que hacer =P.
Escelente lo de publicarlo en inglés tambien; me parece que había un plugin para wordpress que te permitia mostrar el idioma de acuerdo a las preferencias del usuario… pero era para wordpress 1.x (historia antigua).
Puedo preguntar si usas un plugin para wordpress para mejorar el aspecto visual del código?
loading...
Hola Fred. Utilizo el siguiente plugin para lo del código:
http://www.viper007bond.com/wordpress-plugins/syntaxhighlighter/
Lo del inglés como ya dije, tengo que acostumbrarme a escribir por mi mismo, no quiero traductores ni nada por el estilo (bueno cuando me surgen dudas por supuesto que los uso jeje).
Saludos.
loading...
gracias por el tip. Si, tambien considero mejor la práctica de redactar tu mismo el post en inglés; sin embargo me refería a que existia un plugin que te permitía escribir tu mismo el texto para ambas versiones.
Un saludo.