Chiamando il metodo della classe base da costruttore derivato
-
28-09-2019 - |
Domanda
class Base {
public:
Base() {}
void Foo(int x) {...}
};
class Derived : public Base {
public:
Derived(int args) {
/* process args in some way */
Foo(result);
}
};
E 'permesso di chiamare un metodo della classe base nel costruttore della classe derivata? Immagino questo va bene come l'oggetto base deve essere completato, ma ho voluto verificare per ogni evenienza.
Soluzione
E 'permesso di chiamare un metodo della classe base nel costruttore della classe derivata?
Sì. Basta guardare fuori per le funzioni virtual
. Se una classe derivata da Derived
sovrascrive una funzione virtuale, durante la costruzione Derived
come sotto-oggetto di tale classe ulteriormente derivata, il tipo dinamico è sempre Derived
, funzioni quindi nessun virtuali escluse in altre classi derivate sono chiamati. (Lo stesso vale per il distruttore, BTW.)
Mi immagino questo va bene come l'oggetto base deve essere completato, ma ho voluto verificare per ogni evenienza.
Il tuo ragionamento è giusto.
Altri suggerimenti
C'è un pericolo quando:
1. il metodo è sottoposto a override
2. il metodo chiama altri metodi che vengono sostituite