C++ переопределение ... перезапись?

Я знаю переопределение на C++. Но, есть ли перезапись? Если да, то что это значит?

спасибо.

4 ответов


в терминологии C++ у вас есть переопределение (относящиеся к виртуальным методам в иерархии классов) и перегрузка (связано с функцией, имеющей то же имя, но принимающей разные параметры). У вас также есть прячась имен (через явное объявление того же имени во вложенной декларативной области или области).

в стандарте C++ термин "overwrite" используется только в канонической английской форме (то есть для замены одного значения на новое значение, как в задании x = 10 который перезаписывает Предыдущее значение x).


вы можете перезаписать переменные, например,int a = 0; a = 42; и файлы (откройте существующий файл для записи - если у вас есть разрешение, он перезапишет существующее содержимое файла), если это то, что вы имеете в виду. Это имеет мало общего с переопределением. Ты наверно думал перегруза?


обычное различие, с которым я знаком, - это переопределение и перегрузка. Виртуальные функции переопределяются. Функции перегружаются, когда есть версия с тем же именем, но другой подписью (Это существует на многих языках). В C++ также можно перегрузить операторы.

AFAIK, перезапись-это несвязанная концепция (перезапись переменной, файла, буфера и т. д.), и не является специфичным для языков C++ или даже ООП.


переопределить является "нормальной вещью" в ООП: производный класс предоставляет другую (т. е. более специализированную) реализацию для чего-то, переопределяя базовый класс, например apple::foo() переопределяет fruit::foo() если apple является классом, производным от fruit. (не ошибиться с перегрузка используя различные сигнатуры параметров, что приводит к совершенно различным функциям).

перезаписать Я знаю как полностью заменить с другой-определение. Не на определенном уровне, но в целом для остальных программ. Это иногда используется javascript, если большая структура имеет некоторые специальные проблемы, и вы не хотите разрывать большой файл на части:

<script type="text/javascript" 
    src="some super big framework, often in one big file">
<script type="text/javascript">
  Ext.ux.window.createWin = function() {
     // completely OVERWRITE the implementation 
       (often to 'hotfix' a particular bug)
  }
</script>

однако: я не знаю такой вещи в C++, так как совпадающее переопределение функции всегда приведет к ошибкам уже во время компиляции. Самое большее, я могу представить указатели функции изгиба или (re)определение крючков обратного вызова.