也许是一个愚蠢的问题。
假设我有以下内容:
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?
也许是一个愚蠢的问题。
假设我有以下内容:
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?
假设A::get_thing
是虚拟的,假设class B
是从 派生的class A
,并且您有 C++11 支持,您可以使用override
特殊标识符:
class B : public A{
int get_think() override {return y;}
};
这会产生编译器错误。请注意,这是基于方法的签名,即它的名称、cv 限定符和参数类型。返回类型或函数体不包含在其中。
首先,您的示例中有一个错误,我认为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";
}