Duda C++

bLero

Hola,

Me hallaba yo practicando un poco de C++, pues es un lenguaje que tendré que utilizar dentro de poco para ciertas cosillas y necesitaba refrescarlo un poco. Me puse por tanto a hacer varios exámenes prácticos de la asignatura de C++ que se impartía en mi uni, sin ningún problema hasta que me encontré con cierta cuestión:

Supongamos que tenemos una clase base: Profesor, y dos clases derivadas ProfesorX, ProfesorY.

En un momento del exámen hay una pregunta que versa lo siguiente:

"Añadir un método a las clases que modelen a los profesores creados que devuelva de que tipo son de la forma que considere más adecuada. Nota: Se valorará el uso de mecanismos alternativos implementados en el lenguaje C++ para lograr esta funcionalidad, aunque no es obligatorio su uso. Si ha utilizado este mecanismo, ¿Cómo se llama?"

Y el problema es que no tengo ni idea de cuál puede ser ese mecanismo del lenguaje C++.

A mi lo primero que se me ocurrío fué crear un método en la clase base "getType()" que devuelva "profesor", y redefinirlo en las clases derivadas para que devuelva "profesorX" y "profesorY".

Respecto a los mecanismo de C++ para esto, lo único que se me ocurre es utilizar type_info para devolver el tipo. Type_info internamente realiza un dynamic_cast para devolver el tipo de las clases, pero es una operación costosa y la verdad que no le veo sentido siendo dentro de las propias clases, tendría sentido desde otra clase para saber en tiempo de ejecución si un profesor es un profesorX o profesorY así que supongo que se referirá a otra cosa.

¿Alguna idea?

kas

No soy experto en C++, pero:

El mecanismo del que hablas es "method overloading in inheritance", no?

Intentas hacer esto Override a member function with different return type?

1 respuesta
sasher

Lo que dices el Type_info lo estuve barajando yo para mi juego y al final lo descarté por todas las cosas que leí de que no era eficiente para su uso en "tiempo real" (un juego, vaya).

Sin embargo, en un programa como el tuyo no hay mayor problema en usarlo. Por si te interesa, la solución que yo acabé usando fue mantener un enum fuertemente tipado (aunque con uno normal también valdría) para mantener una lista de los tipos, y una variable propia de cada clase que indicara dicho tipo.

1 respuesta
bLero

#2 sobrecarga en herencia lo veo demasiado simple, de hecho es la primera opción que tenía en mente, pero me resulta raro que ese sea el mecanismo al que se refiere la pregunta pues en ese mismo exámen ya se utiliza la sobrecarga en ejercicios anteriores.

De todas formas tampoco creo que haya más alternativas así que seguramente se refiera a eso.

Supongo que la única forma de enterarse de a que se refiere realmente sería preguntando al profesor que puso ese exámen.

#3 Lo de los enum no es mala idea. De todas formas, como digo, no tiene sentido utilizar type_info(this) o dynamic_info<Profesor>(this), por lo que tampoco creo que se refiera a eso.

Khanser

En C++ no hay meta programming así que lo que vas a tener que hacer es lo que te han dicho de la sobrecarga en herencia, un metodo en la clase padre, getType, y que se sobrecargue en cada metodo. Quizas el profe a lo que se refiere es a cosas de OOP, en vez de a especificas de C++

Usuarios habituales

  • Khanser
  • bLero
  • sasher
  • kas