Heim > Artikel > Backend-Entwicklung > Wie können abgeleitete Klassen private rein virtuelle Funktionen in C überschreiben?
Private rein virtuelle Funktionen in C
In C kann es rätselhaft sein, auf private rein virtuelle Funktionen wie in der Engine-Klasse zu stoßen. Wie aus der Frage hervorgeht, wird von abgeleiteten Klassen erwartet, dass sie Implementierungen für diese Funktionen bereitstellen, aber wie können sie dazu auf private Mitglieder der Basisklasse zugreifen?
Die Frage beruht jedoch auf einem Missverständnis: Abgeleitete Klassen können dies tatsächlich überschreiben private rein virtuelle Funktionen. Sie können sie möglicherweise nicht direkt aufrufen, aber sie können ihre eigenen Implementierungen bereitstellen. Dies ermöglicht eine „Trennung der Spezifikation der Schnittstelle von der Spezifikation des anpassbaren Verhaltens der Implementierung“. (Herb Sutter, „Virtualität“)
Im gegebenen Beispiel besteht die öffentliche Schnittstelle aus nicht virtuellen überladenen Funktionen, die nicht öffentliche, nicht überladene virtuelle Funktionen aufrufen. Dieses Muster, bekannt als „Public Overloaded Non-Virtuals Call Protected Non-Overloaded Virtuals“, befasst sich mit dem Problem des „Versteckens“ virtueller Funktionen in abgeleiteten Klassen.
Betrachten Sie den hypothetischen Fall, in dem SetStateBool und SetStateInt reine virtuelle Funktionen waren mit einer nicht virtuellen Schnittstelle in der Basisklasse. Abgeleitete Klassen müssten bestimmte Überladungen davor schützen, von den neuen Implementierungen ausgeblendet zu werden. Dazu müssten sie die using-Deklaration verwenden.
Durch die Verwendung privater virtueller Funktionen können abgeleitete Klassen diese Funktionen jedoch überschreiben, ohne sich Gedanken darüber machen zu müssen, dass andere Methoden in der Basisklasse ausgeblendet werden. Dies vereinfacht den Prozess der Anpassung des Verhaltens virtueller Funktionen in abgeleiteten Klassen.
Das obige ist der detaillierte Inhalt vonWie können abgeleitete Klassen private rein virtuelle Funktionen in C überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!