Dies ist das Non-Virtual Interface Idiom (NVI). Diese Seite von Herb Sutter hat ein gutes Detail. Wie auch immer, temperieren Sie, was Sie dort gelesen haben, was die C ++ FAQ Lite hier sagt > und hier .
Der Hauptvorteil von NVI liegt in der 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 sind von Änderungen in den Algorithmusdetails abgeschirmt, besonders wenn Sie später entscheiden, dass Sie vor und nach der Verarbeitung Code hinzufügen möchten.
Der offensichtliche Nachteil ist, dass Sie extra Code schreiben müssen. Außerdem sind private
virtuelle Funktionen für viele Leute 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 Empfehlung von C ++ FAQ Lite zu folgen und sie zu protected
zu machen.
Dies wird oft als Template-Hook-Paar (a.k.a Hotspot) bezeichnet, geprägt von Wolfgang Pree.
Siehe PDF , PowerPoint , HTML
Ein Grund dafür, die Indirektion zu machen, wie Sie es nennen, ist, dass Dinge oft Setup vor einer Methode und einige cleaing post ein Methodenaufruf. In den Unterklassen müssen Sie nur das notwendige Verhalten liefern, ohne setup und cleaning ...
zu machenDies ist das Vorlagenmuster. Die foo-Methode enthält Code, der von allen Unterklassen ausgeführt werden muss. Es macht mehr Sinn, wenn Sie es so betrachten:
%Vor%Es ist schöner als die Alternative, die versucht, sich daran zu erinnern, den allgemeinen Code in jeder Unterklasse einzeln aufzurufen. Zwangsläufig macht jemand eine Unterklasse, vergißt aber, den allgemeinen Code zu nennen, was zu einer Anzahl von Problemen führt.
Tags und Links c++ inheritance function abstract-class virtual-functions