C ++ Переопределение ... перезапись? - PullRequest
14 голосов
/ 19 января 2011

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

Спасибо.

Ответы [ 4 ]

17 голосов
/ 19 января 2011

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

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

7 голосов
/ 19 января 2011

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

5 голосов
/ 19 января 2011

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

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

2 голосов
/ 13 ноября 2011

Переопределение - это «нормальная вещь» в ООП: производный класс предоставляет другую (то есть более специализированную) реализацию для чего-то, переопределяя базовый класс, например, 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...