Frage

Das nicht-virtuelle Schnittstelle Idiom beschreibt, wie die virtuellen Methoden nonpublic Anpassungspunkte sind, und öffentliche Methoden sind nicht virtuell die Basisklasse zu ermöglichen, jederzeit zu kontrollieren, wie die Anpassungspunkte genannt werden.

Dies ist ein elegantes Idiom und Ich mag es zu benutzen, aber wie funktioniert es, wenn die abgeleitete Klasse eine Basisklasse in mir selbst

War es hilfreich?

Lösung

Es funktioniert, weil die abgeleitete Klasse eine private virtuelle Funktion einer Basisklasse außer Kraft setzen kann, auch wenn die Funktion der Basisklasse überschreibt seine Basisklasse Funktion.

Das ist vollkommen legal:


class Parent
{
public:
  int foo() {return bar();} // the non-virtual public interface
private
  virtual int bar();
};

class Child : public Parent
{
private:
  virtual int bar();  // overrides Parent::bar()
};

class Grandchild : public Child
{
private:
  virtual int bar(); // overrides Child::bar();
};

Andere Tipps

Die abgeleitete Klasse kann für sich selbst entscheiden:

Sie können nur die Methode überschreiben, vollständig durch die virtuelle Funktion zu implementieren. Sie können die Methode erweitern, indem Sie die ‚Mitte‘ Klassen-Funktion an einem gewissen Punkt in der abgeleiteten Klasse Methode aufrufen.

Wenn das nicht das, was Sie wollen, müssen Sie es einrichten explizit in der ‚Mitte‘ Klasse. Ich würde aber nicht. Wenn Sie sich wünschen, diese zu finden, ist es wahrscheinlich bedeutet, dass Sie nicht die Basisklasse genug Anpassungspunkte gegeben hat.

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