DOMANDA 1)costruttore C++ Base chiama con il parametro che saranno costruiti nel costruttore derivato
class Base {
Base(std::string name);
virtual std::string generateName();
}
class Derived : Base {
Derived();
virtual std::string generateName();
}
Qui viene la domanda:
quale metodo verrà invitato generateName()?
Derived :: Derived : Base(generateName()) {
//what method will be called on generateName() ?
}
DOMANDA 2)
come dovrei farlo? se il costruttore predefinito deve accettare un parametro, ma ho bisogno di generare quel parametro nel costruttore Derivato?
Questo sarebbe vero se 'generateName()' veniva chiamato da * inside * 'Base :: Base'. Ma qui, lo chiamiamo nella lista di inizializzazione, prima di entrare in 'Base :: Base'. È ancora vero? –
Ah, hai aggiornato la tua risposta. Questo sembra adesso, quindi +1. –
@Oli: No. Ho sbagliato e ho corretto la risposta dopo aver esaminato il problema e eseguito alcuni test. Sono in qualche modo sorpreso dal comportamento specificato. Mi sembra sbagliato ;-) (Si rompe il modello che generalmente ho usato per ragionare sulle chiamate alle funzioni virtuali durante la costruzione e ora devo tornare indietro e trovare tutte le risposte in cui ho descritto in modo errato il processo .. .) Grazie per aver chiesto la risposta originale. –