#include <stdio.h>
#include <conio.h>
class a
{
public:
int i,j;
a(){i=10;j=-10;}
void imprimir (int v1) { printf ("%d",v1); }
void imprimir (int v1, int v2) { printf ("%d, %d",v1,v2); }
void otra_imprimir (int v1) { printf (" %d",v1); }
};
class b:public a
{
public:
void imprimir (void) { printf ("%d, %d",i,j); }
};
void main (void)
{
b obj_b;
obj_b.imprimir();
//error C2660: 'b::imprimir' : la función no acepta 1 parámetros :blink:
obj_b.imprimir(2); // error O_O
obj_b.otra_imprimir(2);
getch();
}
Que me he perdido ultimamente ? pq pierdo los metodos imprimir de la clase base cuando la clase deribada tiene un método con el mismo nombre ?
Sobrecargo operadores de la clase base, ok y si quiero cargar los mismos en la derivada... ...hasta luego lucas...
C++ una de sus caracteristicas no es la Especializacion ? O_O
Le tienes que poner virtual delante del metodo que puede ser sobre-escrito.
Salu2
Holap!
Lo unico que se me ocurre es que hagas algo así:
obj_b.a::imprimir(2);
Sí que es un poco feo el tema, sí. No me había encontrado con esto nunca =(
Un saludote!
creo que lo que tienes que hacer es poner los métodos de la clase "a" como protected
class a
{
protected:
int i,j;
a(){i=10;j=-10;}
void imprimir (int v1) { printf ("%d",v1); }
void imprimir (int v1, int v2) { printf ("%d, %d",v1,v2); }
void otra_imprimir (int v1) { printf (" %d",v1); }
};
Esto hace que los métodos sean públicos para las clases heredadas y privadas para las demás clases
saludos
La respuesta que di anteriormente esta erronea; Lo que creo que pasa es que tu en la clase "a" defines el metodo "imprimir" con dos variantes segun el numero de parametros; Cuando en la clase "b" sobre-escribes el metodo "imprimir" con otro nuevo que tambien se llama "imprimir", este ultimo por asi decirlo chanca completamente el "imprimir" de la clase "a".
En la clase "b" no puedes usar algunas de las variantes de "imprimir" porque la clase "b" ya no tiene referencias a el metodo imprimir de la clase "a".
Lo que tendrias que hacer es redefinir las dos variantes en "b" y que en el codigo llamen a sus correspondientes metodos en la clase papa ( la "a" )
El asunto es un poco confuso conceptualmente pero creo que eso es lo que pasa.
Salu2
#include
#include
class a
{
public:
int i,j;
a(){i=10;j=-10;}
void imprimir (void) { printf ("a - %d, %d\n",i,j); };
void imprimir (int v1) { printf ("a - %d\n",v1); };
void imprimir (int v1, int v2) { printf ("a - %d, %d\n",v1,v2); };
void otra_imprimir (int v1) { printf ("a - %d\n",v1); };
};
class b:public a
{
public:
void imprimir (void) { printf ("b - %d, %d\n",i,j); };
void imprimir (int v1) { a::imprimir( v1 ); }
void imprimir (int v1, int v2) { a::imprimir( v1, v2 ); }
};
void main (void)
{
b obj_b;
obj_b.imprimir();
//error C2660: 'b::imprimir' : la función no acepta 1 parámetros :blink:
obj_b.imprimir(2); // error
obj_b.otra_imprimir(2);
getch();
}
Si tocar ni una sola linia:
b - 10, -10
a - 2
a - 2
Eso si, compilado con el gcc que no tiene tantos bugs como el visual c++
:rolleyes:
Es decir... el programa esta perfecto lo que falla es el compilador, cambiado de compilador se soluciona todo B)
Es bastante conocida la gran cantidad de bugs que tiene el visual c++ al compilar codi en c++.
MChiz tu solución es la que utilizo, la de Carlos pues tampoco esta mal pero... ...mu parche a mi entender... ...y sorprendido 'habemus' de que unos compiladores no dan problemas... ...y el de vc6 y putoNet si... ...incluso el mítico Turbo C de Borland tb peta... :( ...vamos es como si te enteras que tu abuelo es gay :ph34r:
Holap!
Bueno, despues de todo me alegro de haberte sido de ayuda =)
Un saludote!!