Я знаю, что переопределяет на С++. Но существует ли переписывание? Если да, что это значит?
Спасибо.
Я знаю, что переопределяет на С++. Но существует ли переписывание? Если да, что это значит?
Спасибо.
В терминологии С++ у вас есть переопределение (относящееся к виртуальным методам в иерархии классов) и перегрузка (связанная с функцией с тем же именем, но с разными параметрами). У вас также есть скрытие имен (через явное объявление с тем же именем в вложенном декларативном регионе или области).
Стандарт С++ не использует термин "перезаписать", кроме его канонической английской формы (то есть заменить одно значение на новое значение, как в присваивании x = 10
, которое перезаписывает предыдущее значение x
).
Вы можете перезаписать переменные, например. int a = 0; a = 42;
и файлы (откройте существующий файл для записи - если у вас есть разрешение, оно перезапишет существующее содержимое файла), если это вы имеете в виду. Это мало что касается переопределения. Возможно, вы думали о перегрузке?
Обычное различие, с которым я знаком, - это переопределение и перегрузка. Виртуальные функции переопределены. Функции перегружены, когда есть версия с таким же именем, но с другой подписью (это существует на многих языках). В С++ вы также можете перегружать операторы.
AFAIK, переписывание - это несвязанная концепция (перезаписать переменную, файл, буфер и т.д.) и не относится к языкам С++ или даже ООП.
Override - это "обычная вещь" в OOP: производный класс предоставляет другую (то есть более специализированную) реализацию для чего-то, переопределяя базовый класс, например. apple::foo()
переопределяет fruit::foo()
, если яблоко - это класс, полученный из фруктов. (чтобы не ошибиться с перегрузкой, используя разные сигнатуры параметров, что приводит к совершенно различным функциям).
Перезаписать Я знаю, как полностью заменить другое определение. Не на определенном уровне, а в целом на оставшуюся часть программы. Это иногда используется 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>
Однако: я не знаю ничего подобного в С++, поскольку совпадающее переопределение функции всегда приведет к ошибкам уже во время компиляции. В лучшем случае я могу отображать указатели функции изгиба или (re), определяющие крючки обратного вызова.