如何确定函数是否在编译时被覆盖?

Joh*_*tte 1 c++ overriding compiler-errors compiler-warnings

也许是个愚蠢的问题.

假设我有以下内容:

class A{
     int x;
     int y;
     virtual int get_thing(){return x;}
};

class B : public A {
     int get_think(){return y;}
};
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,B :: get_thing返回x,因为重写代码有拼写错误.

如何在编译时确保在类B中覆盖了get_thing函数,以便它返回y?

jua*_*nza 8

假设A::get_thing是虚拟的,并且假设class B是派生的class A,并且您具有C++ 11支持,则可以使用override特殊标识符:

class B : public A{
     int get_think() override {return y;}
};
Run Code Online (Sandbox Code Playgroud)

这会产生编译器错误.请注意,这是基于方法的签名,即其名称,cv限定符和参数类型.函数的返回类型或正文不会进入它.

  • `override`非关键字只能确保签名与基础中的虚函数匹配,但它不会*确保在类B*中重写了'get_thing`,而在返回y*时更少* (2认同)
  • 有没有办法在C++ 11之前做这样的事情? (2认同)