Forza derivata classe per chiamare la funzione di base
-
19-09-2019 - |
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!
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.