有没有办法标记(在编译时)签名与基本签名不匹配的“重写”方法?

时间:2010-10-08 04:20:28

标签: c++ virtual override

基本上,我希望在我的C ++代码中使用override关键字的C#编译器功能。

class Base
{
   virtual int foo(int) const;
};

class Derived : public Base
{
   virtual int foo(int); // wanted to override Base, but forgot to declare it const
};

众所周知,上面的代码编译得很好,但会产生一些奇怪的运行时行为。我希望我的C ++编译器可以用C#的override关键字来捕获我糟糕的实现。是否有任何关键词如“覆盖”被引入C ++,或者我们是否坚持使用#define override virtual来展示我们的意图? (实际上,我不这样做 - 我讨厌使用预处理器来“扩展”语言)。

2 个答案:

答案 0 :(得分:3)

据我所知,目前的标准是不可能的。您可以在即将推出的C ++ 0x中完成。有关详情,请参阅此处:Explicit virtual function overrides

答案 1 :(得分:1)

如果你不能等待C ++ 0x,Visual C ++已经有了这个override关键字。 (自2005年以来我相信)。语法是:

virtual int foo(int) override;
但是,你没有义务输入它。它是一个非标准的微软扩展。