Clases, Herencia y funciones Virtuales Puras

Hola, tengo una pregunta o duda que hace rato nadie me puede contestar.
Estoy haciendo un trabajo para algoritmos 1 y tengo una duda, tengo por ejemplo una clase base "clase1" y tengo en el public una función virtual "funcion1(int variable)"
Ahora en una de las clases hijas (concretas) "clasehija1" la función "funcion1" ya no es virtual pero necesito pasarle otra variable como parámetro "funcion1(int variable, char carácter)"
Osea:
Código:
//clase1.h
...
class clase1{
public:
clase1();
~clase1();
virtual funcion1(int variable)=0;
};
//clasehija1.h
...
class clasehija1 : public clase1{
public:
clasehija1();
~clasehija1();
funcion1(int variable, char caracter);
};
¿La duda seria como hago en el cpp de "clasehija1" con la "funcion1"?
Tendría que poner las dos funciones "funcion1(int variable)" y "funcion1(int variable, char carácter)" para que ande... Pero no se como.
Osea tendría una sobrecarga de operadores(?) En la función "funcion1"
Pero no se como implementar en "clasehija1.cpp" la "funcion1" ya que tiene distintos parámetros en "clase1" y "clasehija1" .
¿Se entiende?
Buenos, gracias desde ya.
1

1 respuesta

1
Respuesta de
Hola, guasunfli!
A tu pregunta sobre si se entiende tu pregunta la respuesta es no. jajajajja
Tienes todo un poco liado, así que casi que t explico todo.
1º - sobrecarga
Imaginate que tengo una clase así:
class CBase
{
// ...
void funcion1(int);
void funcion1(int,char);
//funcion1 es funcion sobrecargada
}
Para que una función se considere sobrecargada ha de tener mismo nombre y distinto numero de parámetros. Si una función sobrecargada se diferencia unicamente en el valor devuelto dará error de compilación
class CBase
{
// ...
void funcion(int);
int funcion(int); //error
}
2º herencia y funciones virtuales
Al heredar una clase, si en la clase base tenemos una función virtual, en la clase derivada no hace falta definirla como virtual para que lo sea.
Si en la clase derivada creamos una función con el mismo nombre, pero con distinto numero de parámetros, esta no sera virtual. Esto es:
class CBase
{
// ...
virtual void funcion1(int);
//funcion1 es funcion virtual
}
class CDerivada:public CBase
{
// ...
void funcion1(int);
void funcion1(int,char);
//la primera funcion1 es virtual
//la segunda no
}
Si la funcion funcion1(int,char) kiero q sea virtual hay 2 opciones:
* 1
class CBase
{
// ...
virtual void funcion1(int);
//funcion1 es funcion virtual
}
class CDerivada:public CBase
{
// ...
void funcion1(int);
virtual void funcion1(int,char);
}
* 2
class CBase
{
// ...
virtual void funcion1(int);
virtual void funcion1(int,char);
//funcion1 es funcion virtual
}
class CDerivada:public CBase
{
// ...
void funcion1(int);
void funcion1(int,char);
}
No se si ha quedado muy claro, espero que si. De todas formas aquí m tienes para cualquier otr aclaración
Un saludo
Raguin
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje

Más respuestas relacionadas

¿No es la pregunta que estabas buscando?
Puedes explorar otras preguntas del tema C y C++ o hacer tu propia pregunta: