
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.5] |
![]() |
|
Страницы: (117) « Первая ... 11 12 [13] 14 15 ... 116 117 ( Перейти к последнему сообщению ) |
Сообщ.
#181
,
|
|
|
походу я слепая раз незаметила в Дельфи тоже самого, только с другой абривиатурой ![]() |
Сообщ.
#182
,
|
|
|
Сообщ.
#183
,
|
|
|
Кстати не могу асилить
Цитата mo3r Кстати, это код ifstream file1("file1"); ofstream file2("file2"); //do something with file1 and file2} гораздо более удобен, нежели вложенные try/catch/finally... а при чем тут обработка ошибок??? :0\ или данные функции, их автоматом акучат (в случае чего)? |
Сообщ.
#184
,
|
|
|
Цитата Dantes @ IMHO, with пригодился бы, хотя сильной надобности в нём и нет. Не припомню такого, чтобы он мне когда-нибудь мог пригодиться... Никогда не возникало желания чето подобное заюзать при работе на плюсах. ![]() |
Сообщ.
#185
,
|
|
|
Цитата джастфорфанушка @ а при чем тут обработка ошибок??? :0\ Обработка ошибок памяти надо полагать |
Сообщ.
#186
,
|
|
|
Цитата джастфорфанушка @ или данные функции, их автоматом акучат (в случае чего)? Если после открытия файла будет брошено исключение, то в процессе раскрутки стека он будет автоматически закрыт. Никаких телодвижений для этого делать не нужно. RAII - сильная вещь. Цитата Stratocoder @ Не припомню такого, чтобы он мне когда-нибудь мог пригодиться... Никогда не возникало желания чето подобное заюзать при работе на плюсах. Например, заполненине структуры WNDCLASSEX. С with запись получилась бы более лаконичной - зачем каждый раз указывать имя одного и того же объекта или ссылки/указателя на него? Добавлено Мяут, так что там со смарт поинтерами? ![]() |
Сообщ.
#187
,
|
|
|
Цитата Dantes @ Мяут, так что там со смарт поинтерами? ![]() Мяут сам себя удалил |
Сообщ.
#188
,
|
|
|
Цитата Dantes @ Например, заполненине структуры WNDCLASSEX. С with запись получилась бы более лаконичной - зачем каждый раз указывать имя одного и того же объекта или ссылки/указателя на него? Ну, обозвать создаваемый класс чем-то типа wc, и расход не такой уж и большой... |
Сообщ.
#189
,
|
|
|
Угу, в итоге имеем приближённую имитацию with. А наличие всяких имитаторов обычно свидетельстует о недостатке полезных возможностей на уровне языка. Да и wc у меня ассоциируется с ... м-м-м, ну вы поняли
![]() |
Сообщ.
#190
,
|
|
|
Цитата Dantes Если после открытия файла будет брошено исключение, то в процессе раскрутки стека он будет автоматически закрыт. Никаких телодвижений для этого делать не нужно. RAII - сильная вещь. Ну по мне такие "если", ведущие к потери данных, есть великий косяк... Даже если на это ложить автоматом.. Хм.. заценил в win2k системе msvcr70.dll, от VC.NET2003, переименовав в msvcrt.dll.. То ли предвзято относился, то ли еще чего.. Такое ощущение что виндовз получше пашет. И сорцы этой RTL либы открыты. хм.. скомпилить чтоль.. |
Сообщ.
#191
,
|
|
|
а разве легче писать на паскале? А если в дельфи есть DBкомпоненты, так и в BCB они есть.
А вообще прикольно было ветку читать... И честно пытался вспомнить что такого есть в паскале более удобного чем в срр... with я и в паскале никогда не пользовался, так что нафиг он мне в срр? Какой смысл в пропертях в срр? Наличие гетеров/сетеров в классе пахнет не очень красиво, а тут еще более громоздкая конструкция... |
Сообщ.
#192
,
|
|
|
Цитата Мяут @ Вот такая дельфистам задачка: заюзать собственный менеджер памяти. Как будете реализовывать? ![]() И вот ты опять в лужу сел ![]() Можно писать дополнительные функции/процедуры для уже существующих классов. Например: ![]() ![]() type TRect = record Left, Top, Right, Bottom Integer; end; TRectHelper = record helper for TRect function Width: Integer; function Height: Integer; end; function TRectHelper.Width: Integer; begin Result := Right - Left; end; function TRectHelper.Height: Integer; begin Result := Bottom - Top; end; Теперь, чтобы узнать ширину прямоугольника нужно вызвать: var R: TRect; begin R.Width; ... Все просто. А для классов такой пример: ![]() ![]() type TObjectHelper = class helper for TObject // TObject — базовый класс в Delphi function This: TObject; end; function TObjectHelper.This: TObject; begin Result := Self; end; Предположим, есть какой-то класс SomeClass, свойство Items[Name: string] которого возвращает указатель на класс либо nil (нулевой указатель): ![]() ![]() with SomeClass.Items['object_name'] do // а вот очередное удобное применение This if Assigned(This) do // проверяем, существует ли класс begin // производим действия с классом end; |
Сообщ.
#193
,
|
|
|
Цитата Smike @ Молодой, горячий, опыта мало... И вот ты опять в лужу сел ![]() В общем, традиция продолжается. Чтобы добавить что-то, в C++ пишут библиотеку, а в ObjectPascal/Delphi - изменяют язык. ![]() |
Сообщ.
#194
,
|
|
|
Цитата Dantes @ Угу, в итоге имеем приближённую имитацию with. Это не имитация, а самостоятельный механизм. Ну его нафиг, этот with с его таким неявным скрытием имен. wc. - всё понятно, что откуда (да и в IDE с автозавершением имен приятней получится). Цитата Smike Можно писать дополнительные функции/процедуры для уже существующих классов. Чисто фишка RAD - такую заплатку быстрее поставить вместо проведения нормального рефакторинга (да и вообще, в случае с TRect можно было просто написать внешние функции Width и Height). Кстати, а что будет, если в одном из наследников будет определен метод с таким же именем, как из хелпера базового класса? Цитата if Assigned(This) do Прекрасный язык - Делфи - позволяет вызывать нестатические методы у несуществующих объектов. ![]() |
![]() |
Сообщ.
#195
,
|
|
Цитата Hryak @ Ну его нафиг, этот with с его таким неявным скрытием имен. Уж кто бы жаловался на непрозачность кода. Знающему язык всё будет ясно. А конструкция with действительно очень полезна, ничего не попишешь. |