¿Se puede tener una función virtual de tipo clase Padre y luego anularla como tipo Hijo (c++)?
Dada la siguiente estructura de una clase Padre y 2 hijos.
class Data{
protected:
int data;
};
class TreeData: public Data{
// algo
};
class PlantData: public Data{
// algo
};
Entonces, en algún otro lugar tengo otra estructura de clase para recuperar los datos:
class RecoverData{
protected:
string ip;
int commTimeout;
public:
virtual Data getData();
};
class RecoverTreeData: public RecoverData{
public:
TreeData getData(); //Incorrecto
};
class RecoverPlantData: public RecoverData{
public:
PlantData getData(); //Incorrecto
};
Lógicamente, esto no funcionará porque se define un tipo de retorno, pero luego se devuelve otro. Sin embargo, ¿existe alguna forma de obtener un comportamiento similar? (Teniendo en cuenta esta estructura de clase).
davy.ai
Sí, para obtener un comportamiento similar se puede utilizar el polimorfismo y hacer uso de punteros y referencias. Se puede definir el tipo de retorno en la clase base como un puntero o referencia a la clase padre, que luego puede ser redefinido en las clases hijas para devolver un puntero o referencia al objeto de la clase hija correspondiente.
Por ejemplo, la clase
RecoverData
puede ser modificada para devolver un puntero a la claseData
de la siguiente manera:Luego, en las clases hijas, se puede redefinir el método
getData()
para devolver un puntero al objeto de la clase hija correspondiente:Esto permitirá obtener el comportamiento deseado devolviendo punteros a los objetos de la clase hija correspondientes.
Alternativamente, también se pueden utilizar referencias en lugar de punteros para lograr un resultado similar, modificando el tipo de retorno de la misma manera:
En conclusión, haciendo uso del polimorfismo y de los tipos de retorno apropiados, se puede obtener un comportamiento similar en esta estructura de clases.