Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено trainer 21 сентября 2003 г. 10:55
В ответ на: C++ vs Delphi-Pascal. Тут в пятницу очень много наездов было, так спешу (в воскресенье:) обрадовать: строки не 256-символьные, Define/Ifdef/ifndef есть, множественное наследование есть, перегрузка операторов есть, есть и еще чего. Подробнее (+) отправлено Boris Barbaris 21 сентября 2003 г. 08:00

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



Т.е., он просто пишет:
Button1.Caption := 'My Cool Button is ' + Edit1.Text + ' !!';


:) Вы будете плакать и биться головой об стену :) , но я в BCB пишу:

Button1->Caption = "My Cool Button is " + Edit1.Text + " !!";

Рассмотрите, например, С-шный эквивалент паскалевского

if ((Name='Boris Barbaris') and (Time='Five''o''clock')) or (Boss='смотался') then Result:='Пора пить чай';


Я боюсь, Вы разобьете голову об стену :)

if ((Name=="Boris Barbaris") && (Time=="Five\'o\'clock")) || (Boss=="смотался") Result="Пора пить чай";

Множественное наследование легко делается через множественное наследование интерфейсов.

А если классы не реализуют COM? А Вы знакомы с ограничениями паскалевских интерфейсов?

Перегрузка операторов тоже делается (только нахрен никому не нужна) - читайте help по типу Variant

Насколько мне известно, это встроенный тип ObjectPascal, и именно потому, что нет перегрузки операторов.

BigUnsigned<1000> a,b,c,d; // используем 1000-битную арифметику

a = ((a+b)*c)&d;

Наглядно? Попробуйте это же написать на ObjectPascal.

В С/С++/С#/С.. нет типов-диапазонов, поэтому применение switch/case практически лишено всякого смысла (никто, например, не станет перечислять все буквы от A до Z поименно, вместо компактного Паскалевского 'A'..'Z')

А Вы в паскале в case используете исключительно диапазоны? Да и вообще-то есть класс Set и аналогичные, предоставляющие похожую функциональность

костылям-шаблонам

:D Логично - все, что Вам недоступно, объявлять кривым и уродливым. :D

массивы переменной (произвольной) длины с произвольными типами элементов (чего нет в С/С++), легкость использования которых аналогична легкости использования строк

Для этого есть класс vector и аналогичные, использовать которые не менее легко именно благодаря перегрузке операторов.

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

На это я вроде уже отвечал. Основа C++ - классы, а не файлы.

В С++, правда, появилось эрзац-решение этой проблемы - пространство имен (опять-таки под влиянием языков с нормальным разделением мух от котлет).

:D

Конструкторы-деструкторы в С++ безобразные. Нет никакой возможности назвать их именем, соответствующим выполняемой функции, поэтому получается полная мешанина.

У конструктора задача одна - сконструировать объект, у деструктора - разрушить, насчет мешанины - что в ObjectPascal будет выполнено при вызове Object.abcdef? Сконструирован объект? Разрушен? Или еще чего?

Кстати, и называть программу уродливым словом Main вместо нормального функционального имени тоже неприятно

:D Плохому танцору всегда что-то мешает :)

Неоднократно доказывалось, что преждевременная оптимизация программы (до запуска профайлера, без "цифр в руках") только наносит вред и 5-10% никакой роли не играют

А никто и не заставляет сразу писать inline.

Если есть проблемы с быстродействием, надо либо менять алгоритм (наиболее эффективное решение), либо переписывать критичный кусок на ассемблере.

:) Заметьте, отказаться от ObjectPascal предложил не я. :)

Надеюсь, мои ответы не будут поводом к войне ;)

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru