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)определение крючков обратного вызова.