Ich verwende eine Klasse A aus einer Bibliothek und möchte ihr über eine eigene Klasse B einige Funktionen hinzufügen. Der Benutzer der Klasse B sollte daraus abgeleitet werden, als würde er von Klasse A abgeleitet werden.
%Vor%Wenn also jemand eine Klasse C erstellt, die von B stammt, sollte er func2 implementieren:
%Vor%Es ist sehr wichtig für meine Anwendung, dass Klasse C func1 nicht überschreibt und B :: func1 () eliminiert.
Gibt es eine Möglichkeit zu verbieten, diese virtuelle Funktion für alle Kindklassen von B zu überschreiben? Wenn nicht in C ++, gibt es etwas in Boost MPL, das einen Compilerfehler auslöst, wenn diese Funktion überschrieben wird?
Nein, das ist in der aktuellen Ausgabe von C ++, alias C ++ 03, nicht möglich. Der kommende C ++ 11-Standard wird das Kontext-Schlüsselwort final
enthalten, das dies ermöglicht:
Der Microsoft Visual C ++ - Compiler enthält auch das Schlüsselwort sealed
, als eine Erweiterung, die ähnlich wie das C ++ 11-Schlüsselwort final
funktioniert, aber dies funktioniert nur mit dem Compiler von Microsoft.
Nein. In C ++ 03 können Sie abgeleitete Klassen nicht davon abhalten, 1 virtuelle Funktion (en) von Basisklassen zu überschreiben. Basisklassen können jedoch die abgeleiteten (nicht abstrakten) Klassen zwingen, eine Implementierung für virtuelle Funktionen bereitzustellen (in diesem Fall sind die virtuellen Funktionen tatsächlich reine virtuelle Funktionen).
1. Die korrekte Terminologie ist überschreiben , nicht überschreiben .