Начнем с терминологии - похоже, ты путаешь перегрузку с виртуальными методами. Виртуальные методы имеют одинаковые сигнатуры, и могут переопределяться в классах-наследниках, а конкретная реализация выбирается во время исполнения. Перегруженные методы имеют разные сигнатуры, конкретная реализация выбирается при компиляции в зависимости от фактических параметров. Виртуальные методы явно существуют только в объектно-ориентированных языках, в то время как перегрузка возможна и в рамках процедурной парадигмы. Но это не значит, что например на C нельзя писать программы с применением принципов ООП.
Romikgy писал(а):на чистом си используют подмену адреса самой ф-ции , как с тем же прерыванием.... пишем свою ф-цию , берем ее адрес, и записываем на место вектора прерывания, так же можно поступать и с другими ф-циями
Для этого надо, чтобы вызов функции происходил через указатель на нее. Это во первых медленно, во вторых небезопасно (легко обойти контроль типов). При применении слабых символов, связывание имени с адресом происходит на этапе компоновки. И было бы интересно посмотреть, как ты будешь писать новые адреса векторов в флэш.
Michael_K писал(а):просто редкостная штука - мало кто в такие дебри лезет
На самом деле, используется очень часто, просто не все про это знают. В том же avr-gcc (а точнее avr-libc) все вектора прерываний слабо связаны с функцией bad_interrupt, а когда обработчики прерываний определяются в программе - используются эти новые функции.