C ++ verbietet das Überschreiben einer virtuellen Funktion

8

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?

    
Heinzi 24.08.2011, 14:42
quelle

3 Antworten

7

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:

%Vor%

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.

    
Adam Rosenfield 24.08.2011, 14:50
quelle
7

Nicht in C ++ 03, aber C ++ 0x bietet den speziellen "finalen" Bezeichner, um dies zu verhindern:

Ссылка

    
SSJ_GZ 24.08.2011 14:47
quelle
4

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 .

    
Nawaz 24.08.2011 14:46
quelle

Tags und Links