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

时间:2012-11-06 14:55:02

标签: c++ compiler-errors override compiler-warnings

也许是一个愚蠢的问题。

假设我有以下内容:

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

class B : public A {
     int get_think(){return y;}
};

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

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

2 个答案:

答案 0 :(得分:8)

假设A::get_thing是虚拟的,假设class B来自class A,并且您支持C ++ 11,则可以使用override special identifier

class B : public A{
     int get_think() override {return y;}
};

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

答案 1 :(得分:-1)

首先你的例子中有错误,我认为B应该是A的孩子,不是吗?!

但答案是:你可以比较功能的地址(当然,如果你想要它,并且无法在编程时间内检查它):

if( reinterpret_cast<void*>(&B::get_think) != reinterpret_cast<void*>(&A::get_think) ) {
    std::cout << "B override A";
} else {
    std::cout << "B override A";
}