Dies ist die Non-Virtual Interface Idiom (NVI). Diese Seite von Herb Sutter hat ein gutes Detail. Wie auch immer, temperieren Sie, was Sie dort lesen mit dem, was die C++ FAQ Lite here und here sagt.
Der Hauptvorteil von NVI ist die Trennung der Schnittstelle von der Implementierung. Eine Basisklasse kann einen generischen Algorithmus implementieren und ihn der Welt präsentieren, während seine Unterklassen die Details des Algorithmus durch virtuelle Funktionen implementieren können. Externe Benutzer werden von Änderungen in den Algorithmusdetails abgeschirmt, besonders wenn Sie später entscheiden, dass Sie Code vor und nach der Verarbeitung hinzufügen möchten.
Der offensichtliche Nachteil ist, dass Sie extra Code schreiben müssen. Auch private
virtuelle Funktionen sind für viele Menschen verwirrend. Viele Programmierer denken fälschlicherweise, dass Sie sie nicht außer Kraft setzen können. Herb Sutter scheint private
virtuals zu mögen, aber IMHO ist es in der Praxis effektiver, der C++ FAQ Lite Empfehlung zu folgen und sie protected
zu machen.