Возможно глупый вопрос.
Предположим, у меня есть следующее:
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";
}