Подтвердить что ты не робот

С++ Переопределение... переписывание?

Я знаю, что переопределяет на С++. Но существует ли переписывание? Если да, что это значит?

Спасибо.

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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