|
Вопрос # 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.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|