Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Перегрузка операций в Turbo Pascal'е

Автор: Neznaika 8.10.2007 17:56

Вопрос:

Существует ли перегрузка операторов в Turbo Pascal'е?
Если нет, то объяснить почему.
Если да, то привести примеры и назвать самую перегруженную операцию.

Автор: volvo 8.10.2007 17:57

Цитата
Существует ли перегрузка операторов в Turbo Pascal'е?
Нет, в Турбо Паскале - не существует... Почему? Потому что такая возможность не была заложена авторами языка...

Автор: Neznaika 8.10.2007 18:05

volvo - ответ неверный.

Автор: volvo 8.10.2007 18:14

Да? Тогда перегрузи мне операцию сложения двух заданных мной структур? Сделаешь? На Турбо Паскале? А я посмотрю... И заодно приведи определение, что ТЫ подразумеваешь под перегрузкой операций...

Автор: Neznaika 8.10.2007 20:35

Люди, не стесняйтесь, напишите всё, что думаете или знаёте по данному вопросу.
Не одному же volvo всё время отвечать. smile.gif

Автор: volvo 8.10.2007 20:57

dry.gif На твои вопросы я больше отвечать не собираюсь...

Кому-то еще не нравится что я отвечаю на вопросы?

Автор: мисс_граффити 8.10.2007 23:03

Цитата(Neznaika @ 8.10.2007 15:05) *

volvo - ответ неверный.

Хммм......
Читаем http://ru.wikipedia.org/wiki/Перегрузка_операций (особое внимание табличке внизу статьи... хотя она и не совсем корректна, пожалуй... Free Pascal в ней не упоминается, поэтому совершенно непонятно, что они подразумевают под паскалем).

Цитата
назвать самую перегруженную операцию.

Это вообще как? У которой самое большое количество вариантов перегрузки? Или что?

И вообще, о чем речь???
Допустим, в паскале есть
integer+integer - сумма
string+string - конкатинация
ты это понимаешь под перегрузкой?

Автор: Neznaika 8.10.2007 23:11

мисс_граффити - правильно.
Правильно - операция + - сложение чисел, конкатенация(или опять же сложение) строк,
объединение множеств - эта операция перегружена.



Добавлено через 17 мин.
Сегодня в газете прочитал, что меняется формат высшего образования. Стандартом будет - неполное высшее(бакалавриат - 4 года). Потом, чтобы добраться до аспирантуры, нужно поступить в магистратуру(2 года).
Вот будут люди 4 года по 3 месяца "изучать" каждый предмет, а потом экзаменационная комиссия задаст им
вопрос наподобие этого и легко отсеит сказавших: "Нет, перегрузка не существует."

Не знаю, что подумал volvo, но я его ответ не засчитал. У него ответ с объяснением, но этот ответ не подходит.

Вопрос был о существовании.
Если его задать по-другому, а именно так:
Существует ли встроенная перегрузка операций и может ли программист сам перегружать операции,
то ответами разумеется будут - существует и не может.

Мне кажется - это очень важный вопрос. Если знать об этой самой перегрузке операций, то например не будет
ошибок например при выборе между div и / в Паскале или не появится вопрос при целочисленном или вещественном делении в C.

-------------------------------------------------------------------------------------------------------------------------------------
Кстати, этих перегруженных операций довольно много, а некоторые совсем "не видны невооружённым взгядом".

Автор: мисс_граффити 8.10.2007 23:37

вопрос некорректный.
одно дело - "существуют ли перегруженные операторы", другое - "существует ли перегрузка".
по аналогии - "существуют ли процедуры с переменным числом параметров" и "существует ли написание процедур с переменным числом параметров".

Автор: Neznaika 9.10.2007 0:01

Существует ли перегрузка операторов - следует читать существует ли вообще.
Я выше не зря написал про экзаменационную комиссию.

В литературе всегда упоминается перегрузка операторов, как термин, но речь при этом идёт(опять же всегда) лишь о перегруженом символе операции. Что такое операция - это конструкция вида:
операнд_1 символ_операции операнд_2
при этом один из операндов может отсутствовать. Один и тот же символ операции используется в разных операциях.

Здесь просто слово оператор используется традиционно некорректно.

P.S.
А про процедуры тожно так и ответить:
существуют Read и Write, самим создать такие процедуры нельзя.

И естественные языки сильно перегружены. Это и плохо и хорошо.

Автор: мисс_граффити 9.10.2007 0:06

вот такое определение:

Цитата
Что такое операция - это конструкция вида:
операнд_1 символ_операции операнд_2

уж точно ни одна комиссия не пропустит.
яркий пример - в ЛИСПе совсем другая форма записи.
Код
+ 5 3

это что, уже не операция?

Автор: Neznaika 9.10.2007 0:17

То ЛИСП, а это Паскаль. Можно ещё более абстрагироваться - операция это кортеж
<символ_операции, операнд_1, операнд_2>
Перегружается именно символ_операции.

-------------------------------------------------------------------------------------------------------------------------------------
Собственно для чего форум: обсудить и дать совет.
Нельзя же его считать только электронным справочником. Или считать, что знаешь всё,
а кто с этим не согласен, тот идиот.

Откуда например взялось понятие контекста?

Или например в ассемблере есть команды загрузки и сохранения, а для ASM86 мнемоника одна - MOV.

Есть сложные типы данных(массивы, записи), какие операции можно с ними проводить? Присваивание(здесь видна перегрузка :=).

AND-логический и AND-арифметический - это разные AND'ы, но что-то общее у них есть.

Что такое синтез и анализ и т.д. и т.п.

Автор: volvo 9.10.2007 0:57

Цитата
Есть сложные типы данных(массивы, записи), какие операции можно с ними проводить? Присваивание(здесь видна перегрузка :=).
Ничего здесь не видно...

В следующий раз задавай вопросы корректно, если хочешь получать корректные ответы... Перегрузка операций - это механизм, позволяющий программисту переопределить определенную операцию для определенного типа данных... Вот в С++ (кстати, и в FPC тоже) я могу перегрузить операцию сложения для массивов, перегрузить оператор присваивания (т.е., сделать так, чтобы он вел себя НЕ ТАК как встроенный)... А то что ты написал - это базовая возможность языка, никакого отношения к перегрузке не имеющая...