| 
| 
 | Вопрос # 4 385/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Пишет вам начинающий эксперт.  Пожалуйста объясните.
 
 Не пойму такой момент:
 
 var
 student: TPerson;   //  student пока не объект, а только ссылка на него
 т. к. объект динамическая хрень, его надо создать
 
 student := TPerson.Create;  // создали
 
 Спрашивается, на кой Х нужен конструктор (constructor)
 
|  |   Вопрос задал: габибыч (статус: Заблокирован)Вопрос отправлен: 5 июля 2010, 22:12
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 15; последнее сообщение — 6 июля 2010, 11:12; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 22:18 [#1]:Конструктор выделяет память под экземпляр объекта и инициализирует его поля/свойства, если это было задумано его автором. 
 А в чём, собственно, проблема? И где вопрос, типа "накой Х нужен деструктор?"?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 22:21 [#2]:Если утрировать, то конструтор - это классовая функция (class function), которая выделяет память под экземпляр и возвращает значение указателя на этот экземпляр. Точнее объяснить не могу, слов не хватает.   Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | габибыч (статус: Заблокирован), 5 июля 2010, 22:30 [#3]:(не деструктор. читать - конструктор). не могу просто понять, когда  использовать constructor, а когда просто create.
 объясните как первоклашке_)
 |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 22:40 [#4]: Цитата (габибыч): не могу просто понять, когда использовать constructor, а когда просто create. Create - это имя конструктора (читай "функции").
 Объясни на конкретном примере, что напрягает. А то я, блин, не телепат ни разу.
 
 Кстати, имя конструктора может быть любым, а деструктора - только "Destroy".
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | bugmenot (статус: 3-ий класс), 5 июля 2010, 22:58 [#5]:> Пишет вам начинающий эксперт. Прочти книжку.
 Прочти книжку, пожалуйста
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | габибыч (статус: Заблокирован), 5 июля 2010, 23:02 [#6]:// используется constructor 
 type
 TDelimitedReader = class
 ...
 constructor Create(const FileName: string; const ADelimiter: Char = ';');
 ...
 end;
 
 
 нельзя написать тоже самое вот так:
 создаем переменную для класса TDelimitedReader (напр. Jopa)
 var
 Jopa: TDelimitedReader;
 
 и далее в коде написать:
 Jopa:= TDelimitedReader.Create;
 |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 23:06 [#7]: Цитата (габибыч): нельзя написать тоже самое вот так: создаем переменную для класса TDelimitedReader (напр. Jopa) var Jopa: TDelimitedReader;
 и далее в коде написать: Jopa:= TDelimitedReader.Create;
 
 Нет, параметры надо передавать, никуда не денешься!
 
 Jopa:= TDelimitedReader.Create('Ц:\Имя_файла.тхт', ';' {<-- это необязательный параметр, по умолчанию = ";"});Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Паровоз (статус: 10-ый класс), 5 июля 2010, 23:08 [#8]: Цитата: Кстати, имя конструктора может быть любым, а деструктора - только "Destroy".  
 Имя деструктора может быть любым.
 |  
|   | bugmenot (статус: 3-ий класс), 5 июля 2010, 23:14 [#9]:Более того, имена Create и Destroy (или например, Init и Done) - просто семантическая конвенция виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | габибыч (статус: Заблокирован), 5 июля 2010, 23:15 [#10]:я параметры не написал. явообще говорю - эти записи идентичны(примеры с constructor и Jopa)?? |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 23:18 [#11]: Цитата (Паровоз): Имя деструктора может быть любым.  Имя деструктора должно быть "Destroy", чтобы метод "Free" его вызывал. TObject заточен так, не я это придумал.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 5 июля 2010, 23:20 [#12]: Цитата (габибыч): я параметры не написал. явообще говорю - эти записи идентичны(примеры с constructor и Jopa)??  Это всё равно, что сравнивать холодное с мягким или квадратное с зелёным.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Паровоз (статус: 10-ый класс), 6 июля 2010, 10:19 [#13]:"Имя деструктора должно быть "Destroy", чтобы метод "Free" его вызывал. TObject заточен так, не я это придумал." 
 Никто не заставляет для своего класса вызывать Free.
 |  
|   | min@y™ (статус: Доктор наук), 6 июля 2010, 10:38 [#14]: Цитата (Паровоз): Никто не заставляет для своего класса вызывать Free.  А если у тебя список экземпляров хранится в TObjectList с OwnsObjects:= True?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Паровоз (статус: 10-ый класс), 6 июля 2010, 11:12 [#15]:"А если у тебя список экземпляров хранится в TObjectList с OwnsObjects:= True?" 
 А если бы он нес патроны?
 
 To min@y™.
 
 Вы запутываете начинающего. По аналогогичным причинам конструктор должен называться Create.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |