Domanda

Se io derivare una classe da un altro e sovrascrivere una funzione, posso chiamare la funzione di base chiamando Base::myFunction() all'interno della realizzazione del myFunc nella classe derivata.

tuttavia- c'è un modo per definire nella mia classe Base che la funzione di base è chiamato in ogni caso, anche senza averlo chiamato in modo esplicito nella funzione sovrascritto? (Prima o dopo la funzione derivata eseguita)

O, meglio ancora, se ho una funzione virtuale nella mia classe Base virtuale, e due implementato funzioni privato before() e after(), è possibile definire nella classe Base che prima e dopo la funzione in qualsiasi classe derivata di questo Base classe si chiama, saranno chiamati before() e after()?

Grazie!

È stato utile?

Soluzione

No, questo non è possibile.
Ma si può simulare chiamando una funzione virtuale diversa in questo modo:

class Base
{
public:
  void myFunc()
  {
    before();
    doMyFunc();
    after();
  }

  virtual void doMyFunc() = 0;
};

Altri suggerimenti

Si sta cercando di evitare che una classe derivata da sovraccarico / override un metodo nella base. Si può incoraggiare lo segnando metodi come 'non overridable' (a seconda della lingua), ma c'è sempre un modo intorno ad esso.

In altre parole, non si può costringere qualcuno a utilizzare la classe in un modo particolare, dire solo loro il modo in cui dovrebbe essere utilizzato.

Risposta per C ++, non si può avere una funzione ereditata "invisibile" chiamato nel modo desiderato.

Gli unici metodi che chiamano giù attraverso classi ereditate sono costruttori e distruttori.

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