Mögliche Duplizieren:
Private virtual method in C++C++: Private virtuelle Funktionen vs. rein virtuelle Funktionen
Wenn ich mich richtig von diesem Posten verstanden (Private virtual method in C++), eine virtuelle Funktion in einer Basisklasse machen macht die abgeleiteten Klassen in der Lage, sie zu überschreiben. Aber es scheint, dass die Dinge dort aufhören.
Wenn die virtuelle Funktion der Basisklasse jedoch rein ist, erzwingt dies die abgeleiteten Klassen zur Implementierung der Funktion. Daher ist eine reine (öffentliche) virtuelle Funktion lediglich eine Schnittstelle. Ich kann hier einen Vorteil sehen.
Auf der anderen Seite gibt die abgeleitete Klasse der virtuellen Klasse nur die Möglichkeit, die Funktion zu überschreiben, aber ich sehe keinen Vorteil davon. Es ist, als ob diese private virtuelle Funktion nicht einmal da ist. Die abgeleitete Klasse weiß offensichtlich nichts über die Existenz dieser virtuellen Funktion in der Basisklasse, weil sie privat ist. Gibt es also einen Vorteil, eine virtuelle Basisklasse-Funktion als Vererbung oder Polymorphie zu deklarieren?
Gibt es auch eine Situation, in der eine Basisklasse eine Funktion "rein virtuell" und "privat" deklarieren würde?
Vielen Dank.
Warum sollten Sie es als geschützt deklarieren, wenn Sie wissen, dass Sie nie von abgeleiteten Klassen auf die Basismethode zugreifen müssen? Sie können etwas überschreiben, ohne es aufrufen zu müssen. –
http://www.parashift.com/c++faq-lite/private-virtuals.html – Samson
Kein Grund es * sollte * als "geschützt" erklärt werden. Wenn Sie "geschützt" brauchen, verwenden Sie es. Wenn nicht, dann benutze 'private'. – juanchopanza