Как я могу определить, была ли функция переопределена во время компиляции?

Возможно глупый вопрос.

Предположим, у меня есть следующее:

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?

1

Решение

Если предположить, A::get_thing является виртуальным и предполагающим class B происходит от class Aи у вас есть поддержка C ++ 11, вы можете использовать override специальный идентификатор:

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

Это приведет к ошибке компилятора. Обратите внимание, что это основано на сигнатуре метода, то есть его имени, квалификаторах cv и типах параметров. Тип возврата или тело функции в него не входят.

8

Другие решения

Сначала у вас есть ошибка в вашем примере, я думаю, 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";
}
-1

По вопросам рекламы [email protected]