In C ++ è possibile avere una funzione puramente virtuale definita?
-
20-08-2019 - |
Domanda
Ecco l'affare. Ho una gerarchia di grande classe e ho questo metodo che è esteso fino in fondo. Il metodo deve sempre esaminare una o due più variabili ad ogni nuovo livello e queste variabili dipendono dalla classe effettiva nella gerarchia. Quello che voglio fare è controllare quelle due variabili extra, quindi chiamare la versione della superclasse della stessa funzione. Voglio essere in grado di definire questa funzione poiché tutti i suoi figli immediati la useranno, ma voglio forzare tutti i bambini di quella classe a ridefinire quel metodo (perché dovranno guardare i loro nuovi membri di dati)
Quindi come dovrei scrivere questo? Di solito uso = 0; nel file .h, ma suppongo che non posso usarlo e definirlo ...
Soluzione
In realtà puoi dichiarare una funzione come puramente virtuale e definire comunque un'implementazione per essa nella classe base.
class Abstract {
public:
virtual void pure_virtual(int x) = 0;
};
void Abstract::pure_virtual(int x) {
// do something
}
class Child : public Abstract {
virtual void pure_virtual(int x);
};
void Child::pure_virtual(int x) {
// do something with x
Abstract::pure_virtual();
}
Altri suggerimenti
È possibile fornire una definizione per una funzione virtuale pura. Controlla GotW # 31 per ulteriori informazioni.