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 ...

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top