Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 132 133 [134] 135 136 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1996
,
|
|
|
|
и тип каких данных описывает этот класс? =) заодно напомню слова Qraizer'а: "Класс - это не тип данных. Он может быть использован для создания типов данных, но это небольшая частность." |
|
Сообщ.
#1997
,
|
|
|
|
Цитата korvin @ заодно напомню слова Qraizer'а: "Класс - это не тип данных. Он может быть использован для создания типов данных, но это небольшая частность." Он говорил о специфики С++, где class может использоваться и для других целей. |
|
Сообщ.
#1998
,
|
|
|
|
Открываем стандарт C++ и смотрим пункт 3.9.2 Compound types.
|
|
Сообщ.
#1999
,
|
|
|
|
Цитата D_KEY @ Он говорил о специфики С++, где class может использоваться и для других целей. а KILLER разве не на C++ код привел? кроме того, Qraizer упомянул, что это относится и к делфи, я просто не стал тот кусок приводить, можешь глянуть, это вроде на 129-й странице. вот про C# не сказал =) |
|
Сообщ.
#2000
,
|
|
|
|
class - переводится как тип. |
|
Сообщ.
#2001
,
|
|
|
|
Цитата trainer @ Открываем стандарт C++ и смотрим пункт 3.9.2 Compound types. дык сразу ссылку бы дал, или ты пункты на память помнишь? или у тебя он на бумаге? |
|
Сообщ.
#2002
,
|
|
|
|
Цитата --Ins-- @ D_KEY, вернемся к нашим баранам.... Про класс дл работы с GDI+... Опиши еще раз, подробнее, что этот класс у тебя будет делать. Интерфейс его приведи, если так угодно Все, что умеет делать GDI+. Мы, наверно, не совсем друг друга понимаем, да и не работал я с GDI+ уже давно... Если же ты собираешься использовать GDI+ непосредственно в высокоуровневом коде и это будет размазано по всему коду, то можно произвести инициализацию при запуске программы, хоть в main. Можешь завести отдельный класс инициализации. Добавлено --Ins--, каким образом вы вообще работаете именно с GDI+, а не с GDI? |
|
Сообщ.
#2003
,
|
|
|
|
Цитата korvin @ Ссылки у меня нет. Есть файл. Из заголовка пункта и контекста неясно, о чем там написано? Класс в C++ - частный случай составного(пользовательского) типа дык сразу ссылку бы дал, или ты пункты на память помнишь? или у тебя он на бумаге? Добавлено Кстати, сразу же в начале стандарта в пункте 1.1 написано буквально: Цитата In addition to the facilities provided by C, C++provides additional data types, classes, templates, exceptions, namespaces, inline functions, ... |
|
Сообщ.
#2004
,
|
|
|
|
Цитата D_KEY @ Все, что умеет делать GDI+ Все???? Неслабо перегруженный класс у тебя получитсяЦитата D_KEY @ то можно произвести инициализацию при запуске программы, хоть в main. Можно, никто не спорит, но вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses. А юнит о необходимой инициализации финализации сам позаботится. Тут и модульность, и инкапсуляция, и разделение обязанностей, и декомпозиция. Слукавишь, если будешь утверждать обратное Тут есть некоторая аналогия с подключением библиотеки DLL - у них тоже м.б. код собственной инициализации/финализации, скрытый в ее недрах, но ты просто пишешь LoadLibrary не волнуясь о том, что необходимо еще сделать для правильной работы. И кстати, такой подход вполне себе здорово дополняет ОО-подход. Объектный и модульный подход сочетаются замечательно, в то время как собственно объектный подход, который обеспечивается в недообъектных языках (но выдающих себя за такие) в сравнении с ним костылен.Цитата D_KEY @ Можешь завести отдельный класс инициализации. Вот меня это всегда и умиляло Еще заведи класс отдельный для финализации, для выделения памяти объектов GDI+, для освобождения, для слежения за хэндлами, и еще сотню-другую классов, выполняющих различные сервисные действия, потом их сосчитай и ужаснись Не видишь костыльности НЕОБХОДИМОСТИ плодить сущности в программной модели в сравнении с модулями, которые эту необходимость не вызывают?Цитата D_KEY @ --Ins--, каким образом вы вообще работаете именно с GDI+, а не с GDI? Все типы GDI+ MS предоставляет сама (кисти, перья, холсты и т.д.). В Delphi над ними сделана объектная обертка. Кстати, еще одно подтверждение богатства объектной модели Delphi. MS требует выделять и освобождать память для объектов GDI+ специальными функциями. В Delphi это нисколько не мешает использовать обычные классы, просто перекрыв в их общем предке NewInstance/FreeInstance |
|
Сообщ.
#2005
,
|
|
|
|
Цитата --Ins-- @ Ну прям эксклюзив дельфийских юнитов. вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses. |
|
Сообщ.
#2006
,
|
|
|
|
Цитата trainer @ Ну прям эксклюзив дельфийских юнитов. По вашим комментами именно такое впечатление и создается, особенно по таким: Цитата D_KEY @ то можно произвести инициализацию при запуске программы, хоть в main. |
|
Сообщ.
#2007
,
|
|
|
|
Ну так вам уже демонстрировался аналог Initialization/Finalization. Это надо повторять каждые 10 страниц?
|
|
Сообщ.
#2008
,
|
|
|
|
Цитата KILLER @ class - переводится как тип. class переводится как "класс". type переводится как "тип". |
|
Сообщ.
#2009
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Все, что умеет делать GDI+ Все???? Неслабо перегруженный класс у тебя получитсяВсе, что тебе от него нужно. Извини, мое восприятие несколько искажено тем, что я никогда не использую некроссплатформенные технологии напрямую То есть обертка была бы в любом случае. Цитата Цитата D_KEY @ то можно произвести инициализацию при запуске программы, хоть в main. Можно, никто не спорит, но вот оно преимущество юнитов как вещи в себе - подключил и используй, написав просто uses. А юнит о необходимой инициализации финализации сам позаботится. А, ну так для этого можешь создать соответствующий класс, отвечающий за инициализацию: Интерфейс: ![]() ![]() #pragma once class GDIP_initializer { GDIP_initializer(); ~GDIP_initializer(); static GDIP_initializer s_initializer; }; Реализация: ![]() ![]() GDIP_initializer GDIP_initializer::s_initializer = GDIP_initializer(); GDIP_initializer::GDIP_initializer() { // инициализация } GDIP_initializer::~GDIP_initializer() { // деинициализация } Цитата Тут и модульность, и инкапсуляция, и разделение обязанностей, и декомпозиция. Слукавишь, если будешь утверждать обратное Зачем мне утверждать обратное? Я говорю о том, что все тоже самое умеют делать классы. Цитата Тут есть некоторая аналогия с подключением библиотеки DLL - у них тоже м.б. код собственной инициализации/финализации, скрытый в ее недрах, но ты просто пишешь LoadLibrary не волнуясь о том, что необходимо еще сделать для правильной работы. Заметь, что это да и весь твой пример не имеют к ООП никакого отношения и являются следствием процедурного подхода и глобальных инициализаций/финализаций. Цитата Каким образом.И кстати, такой подход вполне себе здорово дополняет ОО-подход. Цитата Конечно, я так и сделаю, ибо не хочу вручную заниматься слежением за памятью, хендлами и выполнять другие сервисные действия, которые можно вынести под контроль отдельных объектов, которые будут делать это автоматически, безопасно(с точки зрения исключений) и не требовать моей ручной работы и копипасты.Вот меня это всегда и умиляло Еще заведи класс отдельный для финализации, для выделения памяти объектов GDI+, для освобождения, для слежения за хэндлами, и еще сотню-другую классов, выполняющих различные сервисные действия, потом их сосчитай и ужаснись Цитата Не видишь костыльности НЕОБХОДИМОСТИ плодить сущности в программной модели в сравнении с модулями, которые эту необходимость не вызывают? Нет никакой необходимости. Не хочешь плодить - вызови вручную. |
|
Сообщ.
#2010
,
|
|
|
|
Цитата korvin @ class переводится как "класс". type переводится как "тип". тип RUS->EN, class EN->RUS, type EN->RUS, класс RUS->EN Этого будет достаточно в качестве аргументов? |