密封虚函数

更新:2007 年 11 月

从 C++ 托管扩展到 Visual C++ 2008,密封虚函数的语法已发生更改。

在托管扩展中,__sealed 用于修改引用类型,不允许派生类中该方法后续重写(请参见 托管类类型的声明),或者用于修改虚函数,不允许派生类中该方法的后续重写。例如:

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

在本例中,derived::f() 基于函数原型的精确匹配重写 base::f() 实例。__sealed 关键字指示从派生类继承的后续类无法提供 derived::f() 的重写。

在新语法中,sealed 放置在签名后面,而不允许出现在实际函数原型之前的任何位置(这在以前是允许的)。此外,sealed 的使用还要求显式使用 virtual 关键字。也就是说,上述 derived 的正确转换如下:

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

此实例中缺少 virtual 关键字会导致错误。在新语法中,上下文关键字 abstract 可用在 =0 的位置以指示一个纯虚函数。托管扩展中不支持这样做。例如:

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

可重新编写为

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

请参见

概念

类或接口中的成员声明

参考

sealed