Freigeben über


Versiegeln einer virtuellen Funktion

Die Syntax zum Versiegeln einer virtuellen Funktion hat sich in Visual C++ 2010 im Vergleich zu Managed Extensions for C++ geändert.

Das __sealed-Schlüsselwort wird in Managed Extensions verwendet, um entweder einen Referenztyp zu ändern und dadurch eine nachfolgende Ableitung von diesem nicht zuzulassen (siehe Deklaration eines verwalteten Klassentyps) oder eine virtuelle Funktion zu ändern und dadurch das nachfolgende Überschreiben der Methode in einer abgeleiteten Klasse zu unterbinden. Beispiel:

__gc class base { public: virtual void f(); };
__gc class derived : public base {
public:
   __sealed void f();
};

In diesem Beispiel überschreibt derived::f() die base::f()-Instanz auf Grundlage der genauen Übereinstimmung des Funktionsprototyps. Das __sealed-Schlüsselwort gibt an, dass in einer nachfolgenden, von der abgeleiteten Klasse geerbten Klasse eine Überschreibung von derived::f() nicht möglich ist.

In der neuen Syntax wird sealed nach der Signatur eingefügt und darf sich nicht mehr vor dem tatsächlichen Funktionsprototypen befinden, wie dies zuvor möglich war. Außerdem erfordert die Verwendung von sealed auch eine explizite Verwendung des virtual-Schlüsselworts. Das heißt, die korrekte Übersetzung von derived in obigem Beispiel lautet wie folgt:

ref class derived: public base {
public:
   virtual void f() override sealed;
};

Das Fehlen des virtual-Schlüsselworts in dieser Instanz führt zu einem Fehler. In der neuen Syntax kann das Kontextschlüsselwort abstract anstelle von =0 verwendet werden, um eine rein virtuelle Funktion anzugeben. Dies wurde in Managed Extensions nicht unterstützt. Beispiel:

__gc class base { public: virtual void f()=0; };

kann umgeschrieben werden als

ref class base { public: virtual void f() abstract; };

Siehe auch

Referenz

sealed

Konzepte

Memberdeklarationen innerhalb einer Klasse oder Schnittstelle