Переопределение функции невозможно в C ++. Прочитайте this о правиле единого определения.
Допускается только одно определение любой переменной, функции, типа класса, типа перечисления, концепции (начиная с C ++ 20) или шаблона. в любой единице перевода (некоторые из них могут иметь несколько объявлений, но допускается только одно определение).
Перегрузка функций класса возможна при наследовании. Перегрузка - это не то же самое, что переопределение.
Вы можете использовать указатели функций, которые вы можете переназначить, например:
#include<functional>
#include<iostream>
std::function<void(int)> keyUp = [](int) {};
void unused() {
keyUp(2);
}
void KeyUp(int i) {
std::cout << i << i << '\n';
}
int main() {
unused(); // no print
keyUp = [](int i) { std::cout << i << '\n'; };
unused(); // prints 2
keyUp = KeyUp;
unused(); // prints 22
}
Это не выглядит одинаково, но фактически это то же самое .. .