Ох уж эти неугомонные дельфипоклонники. Вся ваша аргументация основана на наборе заученных фраз. :)
Т.е., он просто пишет: 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, и именно потому, что нет перегрузки операторов.
Наглядно? Попробуйте это же написать на ObjectPascal. В С/С++/С#/С.. нет типов-диапазонов, поэтому применение switch/case практически лишено всякого смысла (никто, например, не станет перечислять все буквы от A до Z поименно, вместо компактного Паскалевского 'A'..'Z')
А Вы в паскале в case используете исключительно диапазоны? Да и вообще-то есть класс Set и аналогичные, предоставляющие похожую функциональность костылям-шаблонам
:D Логично - все, что Вам недоступно, объявлять кривым и уродливым. :D массивы переменной (произвольной) длины с произвольными типами элементов (чего нет в С/С++), легкость использования которых аналогична легкости использования строк
Для этого есть класс vector и аналогичные, использовать которые не менее легко именно благодаря перегрузке операторов. В С нет нормальных модулей с четким и логичным разграничением области видимости (а также локальных процедур и функций).
На это я вроде уже отвечал. Основа C++ - классы, а не файлы. В С++, правда, появилось эрзац-решение этой проблемы - пространство имен (опять-таки под влиянием языков с нормальным разделением мух от котлет).
:D Конструкторы-деструкторы в С++ безобразные. Нет никакой возможности назвать их именем, соответствующим выполняемой функции, поэтому получается полная мешанина.
У конструктора задача одна - сконструировать объект, у деструктора - разрушить, насчет мешанины - что в ObjectPascal будет выполнено при вызове Object.abcdef? Сконструирован объект? Разрушен? Или еще чего? Кстати, и называть программу уродливым словом Main вместо нормального функционального имени тоже неприятно
:D Плохому танцору всегда что-то мешает :) Неоднократно доказывалось, что преждевременная оптимизация программы (до запуска профайлера, без "цифр в руках") только наносит вред и 5-10% никакой роли не играют
А никто и не заставляет сразу писать inline. Если есть проблемы с быстродействием, надо либо менять алгоритм (наиболее эффективное решение), либо переписывать критичный кусок на ассемблере.
:) Заметьте, отказаться от ObjectPascal предложил не я. :) Надеюсь, мои ответы не будут поводом к войне ;)