Foro con Clase C/C++
Detectar objeto real de una clase heredada de otra.
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
sábado, 19 de noviembre de 2022
Buenas noches Salvador...
Tengo una clase1 que tiene un metodo dameObjeto() que devuelve un objeto de esa clase.
Y una clase2 que hereda de esa clase1. En teoría hereda el metodo dameObjeto() y lo que quiero es que devuelva un objeto de la clase2.
La idea es no tener que reescribir el codigo del metodo de la clase1 en la clase2 sino que el propio metodo se dé cuentas de que lo estoy ejecuntando desde la clase2 y devuelva un objeto de la clase2.
No sé si me he explicado sin poner código.
Como siempre, muchas gracias por adelantado.
Salvador Pozo
Nº de hilos:0
Nº de mensajes:25
viernes, 25 de noviembre de 2022
Hola:
Si he entendido correctamente tu consulta, no necesitarás reescribir el código de ese método para la clase derivada.
Por ejemplo:
--8<----
#include <iostream>
#include <cstring>
using namespace std;
class Persona {
public:
Persona(const char *n) { strcpy(nombre, n); }
virtual void VerNombre() {
cout << nombre << endl;
}
Persona DameObjeto() { cout << typeid(*this).name() << endl; return *this; }
protected:
char nombre[30];
};
class Empleado : public Persona {
public:
Empleado(const char *n) : Persona(n) {}
void VerNombre() {
cout << "Emp: " << nombre << endl;
}
};
class Estudiante : public Persona {
public:
Estudiante(const char *n) : Persona(n) {}
void VerNombre() {
cout << "Est: " << nombre << endl;
}
};
int main() {
Estudiante Pepito("Jose");
Empleado Carlos("Carlos");
Persona &rPepito = Pepito; // Referencia como Persona
Persona &rCarlos = Carlos; // Referencia como Persona
Persona per("Antonio");
rCarlos.VerNombre();
rPepito.VerNombre();
Carlos.DameObjeto();
Pepito.DameObjeto();
per.DameObjeto();
return 0;
}
--8<----
Verás que al llamar a DameObjeto, el tipo es el de la clase derivada en todos los casos.
8Empleado
10Estudiante
7Persona
No sé si es eso lo que quieres hacer.
Hasta pronto.
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
jueves, 30 de marzo de 2023
Salvador por mo tivos personales no he podido entrar hasta ahora...
Como simpre muy agradecido por tu respuesta y también como siempre, funcionó a la perfección!!!
Gracias Salvador...