Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 207 208 [209] 210 211 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#3121
,
|
|
|
|
Цитата Romkin @ Цитата KILLER @ А где тогда автоматизация? При создании экземпляра класса, я считаю конструктор должен вызываться автоматически, иначе зачем его тогда писать? Я могу и так, повызывать SetValue1, SetValue2, и проинициализировать нужные мне члены класса, на кой мне тогда конструктор вообще нужен? Автоматизация покруче в Delphi будет. Я ж сказал: объект создается сразу, причем кодом, уже написанным опытными людьми, единообразно для любого объекта. Какими опытными они не были, знать о предназначении твоего класса и инвариантах они не могут. Это не конструирование объекта - это просто дефолтная инициализация полей, не более. Что еще он делает? Цитата Это не конструктор в нашем понимании. Вы разделили одно единое действие на несколько.Да, если ты помнишь, я согласился с такой формулировкой. Код собственно конструктора в вашем понимании я привел выше, _ClassCreate. Но опять же он вызывается однократно для создания экземпляра, нет цепочки по предкам. Цитата Думаю, что ты не совсем понял С++ конструкторы.Вообще обсуждение конструкторов неконструктивно в дальнейшем: я уже для себя уяснил, что сишники подразумевают под конструктором, и мне это не нравится. Думаю, что объяснить, что такое конструирование в Delphi я тоже смог. Цитата По постановке. У экземпляра Car переключение - абстрактный метод, поэтому переключить скорости у абстрактной машины ты не можешь. Я не могу создать абстрактную машину. А запрашивать переключение скорости я могу у объекта Car. Цитата Не путай бедных сишников. Виртуальные методы класса и статические методы - это разные вещи. В Delphi есть оба варианта, а в С++ - только второй. "Сишники" не бедные и знакомы с другими языками. Как говорится в "старой" поговорке, "любой уважающий себя сишник знает ещё с десяток других языков, главным образом для того, чтобы их обсирать". |
|
Сообщ.
#3122
,
|
|
|
|
Цитата KILLER @ http://www.vipchasi.ru/kpp.php если у машины это будет просто дернуть рычаг и повысить скорость, то у электромобиля - это будет например что то другое... |
|
Сообщ.
#3123
,
|
|
|
|
Цитата trainer @ http://www.vipchasi.ru/kpp.php Гы, тогда чего тут кипиша по электромобилям навели? Значит и вообще для электромобиля не нужно будет реализовывать коробку передач, она ведь такая же как и у машины |
|
Сообщ.
#3124
,
|
|
|
|
Цитата Romkin @ Хм. Уже и сомневаюсь. Ок. Есть объект, в частности, это был пинг. Предоставляет он интерфейс IPing, с возможностью задать адрес и собственно метод ping. Есть и событие у объекта, OnPing, когда ответ пришел. Параметр - запись, адрес и время ответа. После вызова Ping идут периодические пинги до уничтожения объекта. В общем, сделал я. А сисадмин говорит, что пинговать ему одновременно надо много, нужна коллекция этих объектов. Причем чтобы можно было добавлять в нее элемент и извлекать его оттуда (вне коллекции). Элементы предоставляют IPing, у коллекции одно событие OnPing на всех (собственно, это и была цель). Что получилось: Элемент коллекции являетсяв враппером для класса, реализующего IPing, при этом выставляет его интерфейс. При извлечении элемента враппер уничтожается, реализация IPing продолжает работу. Сделано это было без реализации IPing враппером. Понятно изложил или путано? Если удалил из коллекции, а объект продолжает жить, то куда приходит событие? |
|
Сообщ.
#3125
,
|
|
|
|
Проблема в том, что у электромобиля КП нет, за ненадобностью ![]() Цитата Flex Ferrum @ Что-то я недогоняю. Вот есть у нас всё то же отношение TAbstractButton <- TCustomButton <- TButton. Предположим, что у TAbstractButton есть поле State, которое при инициализации должно быть установлено в значение Normal (которое имеет числовое значение '10'). Правильно ли я понимаю (из твоего утверждения), что это поле должно устанавливаться соответствующим образом и в "конструкторе" класса TCustomButton и в конструкторе класса TButton? Понимаешь, тут меня все толкают на то, что создание и инициализация - это конструктор. Ну я и пытаюсь объяснить, так чтобы поняли, что создание и инициализация - разные этапы. Создание - сразу всего объекта, а потом остается его инициализировать как надо, это уже программист пишет. И тут его воля, хочет - вызовет инициализацию от TAbstractButton, хочет - напрямую поле установит. Если долезет, конечно. Язык гарантирует, что конструктор: Цитата To create an object, call the constructor method on a class type. For example: MyObject := TMyClass.Create; This allocates storage for the new object, sets the values of all ordinal fields to zero, assigns nil to all pointer and class-type fields, and makes all string fields empty. Other actions specified in the constructor implementation are performed next; typically, objects are initialized based on values passed as parameters to the constructor. Finally, the constructor returns a reference to the newly allocated and initialized object. The type of the returned value is the same as the class type specified in the constructor call. Цитата D_KEY @ Как говорится в "старой" поговорке, "любой уважающий себя сишник знает ещё с десяток других языков, главным образом для того, чтобы их обсирать". Во-во. Чем больше беседую, тем больше убеждаюсь, что программирование на С++ - это такой особый вид мазохизма. Ужас. Сравнимо с тем, чтобы иметь в гараже Ford-T, и ездить на нем, уверяя всех, что это круто. И периодически раз в десятилетие обращаться в мастерскую, чтобы привесили новые фишки, например, ремни безопасности за десяток лет наконец-то придумали как навесить Добавлено Цитата D_KEY @ Если удалил из коллекции, а объект продолжает жить, то куда приходит событие? OnPing есть и у объекта и у коллекции. Событие приходит в OnPing объекта всегда, а в событие коллекции - если он в ней. Эссно, если есть обработчик. |
|
Сообщ.
#3126
,
|
|
|
|
Цитата Romkin @ Ссылка выше. Ты вообще знаешь, зачем коробка передач у автомобиля? Проблема в том, что у электромобиля КП нет, за ненадобностью |
|
Сообщ.
#3127
,
|
|
|
|
Цитата D_KEY @ "Сишники" не бедные и знакомы с другими языками. Как говорится в "старой" поговорке, "любой уважающий себя сишник знает ещё с десяток других языков, главным образом для того, чтобы их обсирать". Скорее даже можно сказать, что с каждым языком они пытаются работать точно как с С++ И когда это не получается - начинают обсирать. "Если это выглядит иначе, чем в С++ - значит, это неверно. Аминь". Добавлено Цитата trainer @ Ссылка выше. Ты вообще знаешь, зачем коробка передач у автомобиля? Вперед, искать коробку у троллейбуса ![]() Может быть, а может не быть. |
|
Сообщ.
#3128
,
|
|
|
|
Цитата Romkin @ А Delphi ты отождествляешь с каким автомобилем? Через сколько лет вам таки прикрутили strict-секции? Сравнимо с тем, чтобы иметь в гараже Ford-T, и ездить на нем, уверяя всех, что это круто. И периодически раз в десятилетие обращаться в мастерскую, чтобы привесили новые фишки, например, ремни безопасности за десяток лет наконец-то придумали как навесить |
|
Сообщ.
#3129
,
|
|
|
|
Цитата Romkin @ Вперед, искать коробку у троллейбуса Может быть, а может не быть. Если у него нет коробки передач, зачем тогда мне у него переключать передачу? |
|
Сообщ.
#3130
,
|
|
|
|
Цитата Romkin @ "Не быть" - значит передаточное число 1:1 и скорость одна. Вперед, искать коробку у троллейбуса ![]() Может быть, а может не быть. |
|
Сообщ.
#3131
,
|
|
|
|
Цитата trainer @ А Delphi ты отождествляешь с каким автомобилем? Через сколько лет вам таки прикрутили strict-секции? Это не является необходимостью. А через сколько лет вам прикрутили строгую проверку типа перечисления? Уж явно поновее самых первых моделей. По крайней мере, второе поколение, что-то вроде Опеля времен войны. object сменен на class, считай вместо ременной передачи кардан поставили. |
|
Сообщ.
#3132
,
|
|
|
|
Цитата Romkin @ Понимаешь, тут меня все толкают на то, что создание и инициализация - это конструктор. Ну я и пытаюсь объяснить, так чтобы поняли, что создание и инициализация - разные этапы. Создание - сразу всего объекта, а потом остается его инициализировать как надо, это уже программист пишет. И тут его воля, хочет - вызовет инициализацию от TAbstractButton, хочет - напрямую поле установит. Если долезет, конечно. Понимаю. C++ тоже есть подобное разделение. Отдельно - аллокация (опционально), отдельно - конструирование, оно же инициализация. Да, не подкладывается соломка в виде Цитата Romkin @ sets the values of all ordinal fields to zero, assigns nil to all pointer and class-type fields, and makes all string fields empty. но зато и к двойной инициализации полей всё это не приводит. Память под объект выделили, конструктор позвали - он сделал своё грязное дело (т. е. проинициализировал должным образом поля объекта). Все довольны. |
|
Сообщ.
#3133
,
|
|
|
|
Цитата trainer @ "Не быть" - значит передаточное число 1:1 и скорость одна. Ладно, коли так уперлось, сделай метод "получить емкость бензобака в литрах" |
|
Сообщ.
#3134
,
|
|
|
|
Цитата Romkin @ А через сколько лет вам прикрутили строгую проверку типа перечисления? Да вроде от рождения стандарта была. |
|
Сообщ.
#3135
,
|
|
|
|
Цитата Flex Ferrum @ но зато и к двойной инициализации полей всё это не приводит. Память под объект выделили, конструктор позвали - он сделал своё грязное дело (т. е. проинициализировал должным образом поля объекта). Все довольны. А случай, когда в конструкторе предка поле инициализируется в 1, а в конструкторе потомка надо туда поставить 2, не приводит к двойной инициализации? |