也许是一个愚蠢的问题。
假设我有以下内容:
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?
答案 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";
}