Reine virtuelle Funktionen im privaten Bereich
Wenn Sie auf Code mit privaten, rein virtuellen Funktionen in einer Basisklasse stoßen, wie im bereitgestellten Beispiel :
class Engine { public: void SetState( int var, bool val ); void SetState( int var, int val ); private: virtual void SetStateBool( int var, bool val ) = 0; virtual void SetStateInt ( int var, int val ) = 0; };
Es kann so aussehen, als ob abgeleitete Klassen nicht auf diese Funktionen zugreifen können, um sie zu implementieren. Abgeleitete Klassen können jedoch private virtuelle Funktionen überschreiben und ihre eigenen Implementierungen bereitstellen. Dies ist nicht mit der Unfähigkeit abgeleiteter Klassenmethoden zu verwechseln, virtuelle Funktionen aus der Basisklasse aufzurufen.
Trennung von Schnittstelle und Implementierung
Private virtuelle Funktionen ermöglichen die Trennung der Schnittstellenspezifikation von der Implementierung, die in abgeleiteten Klassen angepasst werden kann. Die öffentliche Schnittstelle besteht aus einer Reihe überlasteter nicht virtueller Funktionen, die private, nicht überlastete virtuelle Funktionen aufrufen. Diese Redewendung, bekannt als „Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals“, hilft bei der Verwaltung der Ausblendungsregel.
Verhindern des Ausblendens
In einem Szenario, in dem die Da die öffentliche Schnittstelle nicht virtuell und die virtuelle Implementierung privat ist, kann der Autor der abgeleiteten Klasse einfach seine eigene Implementierung der virtuellen Funktionen bereitstellen, ohne sich Gedanken über das Ausblenden der Mitglieder der Basisklasse machen zu müssen. Zum Beispiel:
class MyTurbochargedV8 : public Engine { private: void SetStateInt(int var, int val ) {/* new implementation */} };
Das obige ist der detaillierte Inhalt vonWie können abgeleitete Klassen private rein virtuelle Funktionen in einer Basisklasse implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!