1

也许是一个愚蠢的问题。

假设我有以下内容:

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 因为覆盖代码有错字。

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

4

2 回答 2

8

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

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

这会产生编译器错误。请注意,这是基于方法的签名,即它的名称、cv 限定符和参数类型。返回类型或函数体不包含在其中。

于 2012-11-06T14:57:43.410 回答
-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";
}
于 2012-11-06T14:59:25.680 回答