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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top