Kraftableitete Klasse, um die Basisfunktion aufzurufen
-
19-09-2019 - |
Frage
Wenn ich eine Klasse von einer anderen ableite und eine Funktion überschreibe, kann ich die Basisfunktion aufrufen, indem ich aufruft Base::myFunction()
innerhalb der Implementierung von myFunc
in der abgeleiteten Klasse.
Gibt es jedoch eine Möglichkeit, in meinem zu definieren Base
Klasse, dass die Basisfunktion auf jeden Fall aufgerufen wird, auch ohne sie explizit in der überschriebenen Funktion aufgerufen zu haben? (entweder vor oder nach der abgeleiteten Funktion)
Oder sogar noch besser, wenn ich eine virtuelle Funktion in meiner Virtuellen habe Base
Klasse und zwei implementierte private Funktionen before()
und after()
, ist es möglich, in der zu definieren? Base
Klasse das vor und nach der Funktion in einer abgeleiteten Klasse davon Base
Klasse heißt,, before()
und after()
wird angerufen werden?
Vielen Dank!
Lösung
Nein das ist nicht möglich.
Sie können es jedoch simulieren, indem Sie eine andere virtuelle Funktion wie SO aufrufen:
class Base
{
public:
void myFunc()
{
before();
doMyFunc();
after();
}
virtual void doMyFunc() = 0;
};
Andere Tipps
Sie versuchen zu verhindern, dass eine abgeleitete Klasse eine Methode in der Basis überlastet/überschreibt. Sie können es fördern, indem Sie Methoden als "nicht überschrieben" (abhängig von der Sprache) markieren, aber es gibt immer einen Weg.
Mit anderen Worten, Sie können jemanden nicht zwingen, Ihre Klasse auf eine bestimmte Weise zu verwenden, sondern ihm nur mitzuteilen, wie sie verwendet werden sollte.
Wenn Sie auf C ++ antworten, können Sie keine ererbte Funktion "unsichtbar" haben, die in der Art, wie Sie es möchten, aufgerufen werden.
Die einzigen Methoden, die durch ererbte Klassen aufrufen, sind Konstrukteure und Zerstörer.