Sdílet prostřednictvím


Zapečetění virtuální funkce

Syntaxe pro zapečetění virtuální funkce se změnila ze způsobů ze Správce rozšíření pro C++ na způsob z Visual C++ 2010.

Klíčové slovo __sealed je použito ve spravovaných rozšířeních k úpravám buď odkazového typu, zakazuje následné odvození z něj (viz Deklarace spravovaného typu třídy), nebo k úpravě virtuální funkce, zakazuje následné přepsání metody v odvozené třídě. Příklad:

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

V tomto příkladu derived::f() přepisuje instanci base::f() na základě přesné shody prototypu funkce. Klíčové slovo __sealed označuje, že následná třída zděděná z odvozené třídy nemůže poskytnout přepsání derived::f().

V nové syntaxi je klíčové slovo sealed umístěno za signaturu a ne kdekoli před prototypem skutečné funkce, jak tomu bylo dříve. Kromě použití sealed také vyžaduje explicitní použití klíčového slova virtual. Správný překlad výše uvedeného derived je následující:

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

Neexistence klíčového slova virtual má v tomto případě za následek chybu. V nové syntaxi může být kontextové klíčové slovo abstract použito místo =0, abyste označili čistou virtuální funkci. Toto nebylo podporováno v rámci spravovaného rozšíření. Příklad:

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

může být přepsán jako

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

Viz také

Odkaz

sealed

Koncepty

Členské deklarace v rámci třídy nebo rozhraní