Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, s.ts, Вы писали:
ST>>Дык и не нужно конструктора в том виде — все равно он ничего не конструирует WH> ST>>(вся работа в операторе new происходит) — WH> ST>>просто как триггер на создание объекта различными способами используется и все. WH> Ну уж нет. В С++ это конструктор, а вот в дельфе это лишь функция вызваная после полного создания объекта. И только по этому там можно вызывать виртуальные функции ибо объект уже давно создан.
А как в конструкторе C++ можно управлять созданием объекта ?
WH>Мдя. Я реализовал логически эквивалентные дельфе конструкторы/деструкторы на С++, а мне говорят что это даже не интересно.
Ну, я извиняюсь, если это показалось грубым. Но, право же, это правда, ибо реализовать это можно 10 разными способами, а в стандарте нет ни одного — т.е. самодеятельность получается.
WH>Ага. Единственный аргумент тех кому нечего сказать.
Здравствуйте, DarkGray, Вы писали:
DG>Во-первых, я имел ввиду большую (но все таки не всю) часть дельфистов. DG>Во-вторых, если завтра взять двух достаточно умных людей, но которые не разбираются в программировании, DG>и посадим их писать проги на Delphi, и на VC, то второму придется (хошь, не хошь) выучить больше о программирование, чем первому.
Хороший аргумент! Полностью поддерживаю!
Э... можно небольшое уточнение? А в чью только пользу этот аргумент?
Здравствуйте, WolfHound, Вы писали:
Ну, теперь еще сделай так, чтобы я мог построить функцию, принимающую указатель на класс и вызывающую вот этот твой сreate с заданными параметрами.
В дельфи это будет вот так:
type
TBaseClass = class of base;
function CreateMyBaseDescendant(BaseClass: TBaseClass): base;
begin
Result:= BaseClass.create(2, 4);
end;
var
K: base;
begin
K:= CreateMyBaseDescendent(some);
end;
... << RSDN@Home 1.1 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Igor Trofimov, Вы писали:
DG>>>и посадим их писать проги на Delphi, и на VC, то второму придется (хошь, не хошь) выучить больше о программирование, чем первому.
iT>Пожалуй. Но мне кажется, что быстрее и качественнее программу напишет первый.
Ну и еще, что имхо не менее важно при работе с клиентами, красивее, привлекательнее, дружественнее. Знаю по личному опыту. Хотя сразу оговорюсь — это также сильно зависит от непосредственного исполнителя и постановщика задачи.
Здравствуйте, Igor Trofimov, Вы писали:
DG>>>и посадим их писать проги на Delphi, и на VC, то второму придется (хошь, не хошь) выучить больше о программирование, чем первому.
iT>Пожалуй. Но мне кажется, что быстрее и качественнее программу напишет первый.
Опыт показывает что нет. Быстрее — да. Качественее — НЕТ. Ламер садится за Дельфи, понимает что кидать кнопки на форму и настраивать пропертя это очень просто. Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На VC так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте.
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Здравствуйте, zaiats_2k, Вы писали:
_>Здравствуйте, Igor Trofimov, Вы писали:
DG>>>>и посадим их писать проги на Delphi, и на VC, то второму придется (хошь, не хошь) выучить больше о программирование, чем первому.
iT>>Пожалуй. Но мне кажется, что быстрее и качественнее программу напишет первый.
_>Опыт показывает что нет. Быстрее — да. Качественее — НЕТ. Ламер садится за Дельфи, понимает что кидать кнопки на форму и настраивать пропертя это очень просто. Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На VC так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте.
Давайте все же не будем считать ламеров программистами — последним обидно. Ламер — он и в Африке ламер, хоть на Delphi, хоть на VC. Если человек хочет научиться чему-то по настоящему и будет работать, то он научиться, если нет — то ... что ж делать, насильно не заставишь.
Насчет того, что второму придется выучить больше — полностью согласен. Первому тоже придется выучить не меньше, но позже. Для нормальной работы на Delphi тоже необходимо много знать.
Могу рассказать из личного опыта, если кому интересно.
Начинал со старого доброго Borland Pascal — не было под рукой С и преподы Pascal в универе давали. Работал стандартно через процедуры. В использовании объектов и надобности не возникало — так пробовал для личного развития и только.
Подвернулось задание — попробовал Дельфи 3. Сначало кнопочки, там события, перестраивал себя, учил язык и среду, нарабатывал опыт.
С каждым разом проги получались все лучше и лучше.
Заказов сейчас — куча.От того, что делаю пользователи и клиенты в восторге. (Сужу по отзывам и личным благодарностям. Наездов на проги никаких не было за все время. Только прозьбы добавить чего-нибудь).
Знавал нескольких людей, которые пошли в сторону C++. Как людей — уважаю. Только нос почему-то задирают и усмехаются когда узнают на чем пишу. Однако это вовсе не мешало им просить написать для них программки, алгоритмики, да и за советами дорогу не забывают. И на проги их кстати нареканий было море. (У нас в конторе заказ делали им).
К чему все это говорю? Да к тому, что все равно на каком языке писать — главное, чтобы все работало и работать с программой было удобно и приятно. А там — хоть свой язык пиши, если конечно заказчика сроки и суммы удовлетворять будут, но это уже совсем другая история.
Считаю споры и взаимные доказательства, по поводу Delphi vs VC vs Prolog vs Java vs VB vs etc., читай подоплеку — "Я круче..." или "Да вы полные дауны и ламеры..." абсолютно бестолковые и ничего кроме лишней трепке нервов не несут. Хотя конечно имхо.
Может лучше сообща придумать перечень требований, которые хотелось бы видеть в "Идеальном Языке Программирования" или "Идеальной Среде Программирования". К терминам прозьба не придираться — они в принципе не важны.
P.S.
Сейчас работаю на Delphi 6, активно использую ООП и всякое другое, че там есть. Практически полностью доволен и языком и средой. Не хватает мелочей. Хотя не исключаю возможности, что они уже есть а я просто не знаю где их найти. Крайне уважительно отношусь к другим языкам. Стараюсь также относиться к программистам, которые на них пишут.
2: zaiats_2k> Прошу прощения за такой монолог в ответе — это не наезд, просто не знаю в какую ветку кинуть.
Z2>Опыт показывает что нет. Быстрее — да. Качественее — НЕТ. Ламер садится за Дельфи, понимает что кидать кнопки на форму и настраивать пропертя это очень просто. Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На VC так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте.
То же можно и про asm сказать.
"Ламер садится за VC,... Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На asm так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте."
Переходим на асм? Программы будут просто зашибись!
Здравствуйте, Forint, Вы писали:
Z2>>Опыт показывает что нет. Быстрее — да. Качественее — НЕТ. Ламер садится за Дельфи, понимает что кидать кнопки на форму и настраивать пропертя это очень просто. Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На VC так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте.
F>То же можно и про asm сказать. F> F>"Ламер садится за VC,... Кое-как лабает программу худо-бедно работающую и на этом останавливается в развитии. На asm так не получается. Там думать надо, усилия прикладывать... Соответственно и результаты лучше получаются в конечном счёте."
F>Переходим на асм? Программы будут просто зашибись!
Что ASM? Давайте лучше машинные коды или сразу схемные решения
Здравствуйте, WolfHound, Вы писали:
WH>В дельфе нет конструкторов в том виде в котором они есть в С++. В дельфе это фабричная функция
Если вы думаете, что программирование заканчивается на Windows и OLE, то вы несколько заблуждаетесь.
ST>>RTTI WH>Ну в С++ оно теже есть. Конечно список пропертей из паблишед не получить да и в С++ пиблишед нету но для работы вполне достаточно.
Принимается! Замечательный ответ. Только когда вам отвечают таким же образом реакция почему-то другая
WH>Ну это уже очень глубоко филосовские темы. Но я считаю что прогресс идет из-за двух вещей WH>1)Лень WH>Людям лениво было помнить машинные коды — придумали асм WH>Потом стало лениво писать на асме — придумали С WH>...
Согласен. Только уж пожалуйста продолжай, раз начал...
Потом стало лениво писать на С — придумали С++
Потом стало лениво писать на С++ — придумали ... Что придумали?
WH>>Людям лениво было помнить машинные коды — придумали асм WH>>Потом стало лениво писать на асме — придумали С WH>>... FWP>Согласен. Только уж пожалуйста продолжай, раз начал...
FWP>Потом стало лениво писать на С — придумали С++ FWP>Потом стало лениво писать на С++ — придумали ... Что придумали?
С#
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Здравствуйте, FWP, Вы писали:
WH>>В дельфе нет конструкторов в том виде в котором они есть в С++. В дельфе это фабричная функция FWP>Если вы думаете, что программирование заканчивается на Windows и OLE, то вы несколько заблуждаетесь. Ты вобще о чем?
WH>>Ну в С++ оно теже есть. Конечно список пропертей из паблишед не получить да и в С++ пиблишед нету но для работы вполне достаточно. FWP>Принимается! Замечательный ответ. Только когда вам отвечают таким же образом реакция почему-то другая
И для чего кроме ГУИ это полезно? Вот толко не надо про сериализацию я на С++ и круче могу.
FWP>Потом стало лениво писать на С — придумали С++ FWP>Потом стало лениво писать на С++ — придумали ... Что придумали?
.NET
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, s.ts, Вы писали:
ST>Здравствуйте, WolfHound, Вы писали:
ST>Я так и не понял как же конструктор C++ конструирует объект и какие преимущества по сравнению с дельфи это дает ?
Как ему напишешь, так и конструирует. Можно даже собстветнный менеджер памяти залудить... Смогёшь это в Дельфи повторить?
0 программистов ругал сердитый шеф,
потом уволил одного, и стало их FF!
Здравствуйте, s.ts, Вы писали:
ST>Я так и не понял как же конструктор C++ конструирует объект и какие преимущества по сравнению с дельфи это дает ?
Сначала конструируются базовае классы в порядке перечисления, потом челены класса в порядке обьявления потом происходит вызов тела конструктора причем можно передать параметры в любой из конструкторов как бызовах классов так и челенов.
Уничтожение происходит в обратном порядке те сначала происходит вызов деструктора, потом вызов деструкторов челенов в обратном порядке, потом вызов деструкторов базовых классов в обратном порядке.
Это дает прибавку к скорости в сложных объектах и уменьшает возможности для ошибки и сокращает код.
Например нам надо иметь челен класса динамический массив состоящий из 100 целых чисел и пустой список строк
В данном случае гарантировано что массив после создания будет обнулен, а во время разрушения объекта будет корректно удален, тоже самое для списка строк.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, zaiats_2k, Вы писали:
_>Здравствуйте, s.ts, Вы писали:
ST>>Здравствуйте, WolfHound, Вы писали:
ST>>Я так и не понял как же конструктор C++ конструирует объект и какие преимущества по сравнению с дельфи это дает ?
_>Как ему напишешь, так и конструирует. Можно даже собстветнный менеджер памяти залудить... Смогёшь это в Дельфи повторить?
В дельфе есть NewInstance, InitInstance, FreeInstance и свой менеджер памяти делается запросто.
Например получение экземпляра Singleton не отличается от получения объекта любого другого класса — при помощи того же конструктора, а не
static MyClass & _Instance();
Впрочем, того же можно достичь и в С++ путем перегрузки new и delete если гарантировать, что экземпляры будут создаваться только с их помощью. Так ? Или я чего-то не понимаю ?
Но как из конструктора C++ сделать так, чтобы локальный объект располагался в нужном месте, а не в стеке ?
class MyClass
{
private:
int[100000] Data;
public:
MyClass()
{
// 2 WolfHound
// Insert your code here
};
};
void main(void)
{
MyClass m;
// 2 WolfHound
//<< Предположим, что я хочу, чтобы m располагался в куче ? Что нужно написать в конструкторе ?
};
P.S. Только не нужно делать оберток для MyClass. Мы обсуждаем конструирование объектов в конструкторе.
ST>class MyClass
ST>{
ST>private:
ST> int Data[100000];
ST>public:
ST> MyClass()
ST> {
ST> // 2 WolfHound
ST> // Insert your code here
ST> };
ST>};
ST>void main(void)
ST>{
ST> MyClass m;
ST> // 2 WolfHound
ST> //<< Предположим, что я хочу, чтобы m располагался в куче ? Что нужно написать в конструкторе ?
ST>};
ST>
Если хочешь чтобы m было в куче то и создавай его в куче.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, s.ts, Вы писали:
ST>>
ST>>class MyClass
ST>>{
ST>>private:
ST>> int Data[100000];
ST>>public:
ST>> MyClass()
ST>> {
ST>> // 2 WolfHound
ST>> // Insert your code here
ST>> };
ST>>};
ST>>void main(void)
ST>>{
ST>> MyClass m;
ST>> // 2 WolfHound
ST>> //<< Предположим, что я хочу, чтобы m располагался в куче ? Что нужно написать в конструкторе ?
ST>>};
ST>>
WH>Если хочешь чтобы m было в куче то и создавай его в куче. WH>
Такой ответ меня не устраивает. Мы же говорили о том, что конструктор C++ конструирует объекты. Вот и приведи мне пример того, как это сделать. auto_ptr — это доп. обертка.
Код, приведенный выше на любом ОО языке можно написать и не показывает ЧЕМ КОНСТРУКТОР С++ ОТЛИЧАЕТСЯ ОТ ТРИГГЕРА НА СОЗДАНИЕ ОБЪЕКТА.
1.КАК В С++ ИЗ КОНСТРУКТОРВА МОЖНО УПРАВЛЯТЬ КОНСТРУИРОВАНИЕМ ОБЪЕКТА, КРОМЕ ИНИЦИАЛИЗАЦИИ ПОЛЕЙ И ВЫЗОВОВ КОНСТРУКТОРОВ БАЗОВЫХ КЛАССОВ ????????????
2.ЧЕМ ИМЕННО МОЖНО УПРАВЛЯТЬ В КОНСТРУКТОРЕ ????????????????
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, s.ts, Вы писали:
ST>>Я так и не понял как же конструктор C++ конструирует объект и какие преимущества по сравнению с дельфи это дает ? WH>Сначала конструируются базовае классы в порядке перечисления, потом челены класса в порядке обьявления потом происходит вызов тела конструктора причем можно передать параметры в любой из конструкторов как бызовах классов так и челенов.
В делфе нужно указывать вызов конструктора/деструктора базового класса, но в любом месте, а можно и не указывать.
WH>Уничтожение происходит в обратном порядке те сначала происходит вызов деструктора, потом вызов деструкторов челенов в обратном порядке, потом вызов деструкторов базовых классов в обратном порядке. WH>Это дает прибавку к скорости в сложных объектах и уменьшает возможности для ошибки и сокращает код.
Прибавки в скорости перечисленное выше, конечно же не дает никакой
Как резюме, от себя могу сказать, чтоо ИМХО конструкторы в дельфи — более сильная часть чем в С++. А чего не хватает относительно С++ — это краткости кода (begin, end etc.), перегрузки операторов и шаблонов. Впрочем, это, видимо, общая тенденция. Ну и еще технологии не хватает (т.е. она кое-как реализуется при поддержке 3-х фирм и очень слабо).