PREGUNTA 1)constructor de C++ Base llamando con el parámetro que será construido en el constructor derivado
class Base {
Base(std::string name);
virtual std::string generateName();
}
class Derived : Base {
Derived();
virtual std::string generateName();
}
aquí viene la pregunta: ¿
qué método será llamado en generateName()?
Derived :: Derived : Base(generateName()) {
//what method will be called on generateName() ?
}
PREGUNTA 2)
cómo debo hacerlo? si el constructor predeterminado debe aceptar un parámetro, pero necesito generar ese parámetro en el constructor Derivado?
Esto sería cierto si 'generateName()' se llama desde * inside * 'Base :: Base'. Pero aquí, lo llamamos en la lista de inicializadores, antes de ingresar a 'Base :: Base'. ¿Esto sigue siendo cierto? –
Ah, has actualizado tu respuesta. Esto se siente ahora, así que +1. –
@Oli: No. Me equivoqué y he corregido la respuesta después de investigar el problema y ejecutar algunas pruebas. De hecho, estoy algo sorprendido por el comportamiento especificado. Me parece mal ;-) (Rompe el modelo que generalmente he usado para razonar sobre las llamadas a funciones virtuales durante la construcción y ahora tengo que volver y encontrar todas las respuestas en las que describí mal el proceso ... .) Gracias por cuestionar la respuesta original. –