Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 385

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Пишет вам начинающий эксперт. Пожалуйста объясните.

Не пойму такой момент:

var
student: TPerson; // student пока не объект, а только ссылка на него
т. к. объект динамическая хрень, его надо создать

student := TPerson.Create; // создали

Спрашивается, на кой Х нужен конструктор (constructor)

габибыч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: габибыч (статус: Заблокирован)
Вопрос отправлен: 5 июля 2010, 22:12
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 6 июля 2010, 11:12; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 22:18 [#1]:

Конструктор выделяет память под экземпляр объекта и инициализирует его поля/свойства, если это было задумано его автором.

А в чём, собственно, проблема? И где вопрос, типа "накой Х нужен деструктор?"?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 22:21 [#2]:

Если утрировать, то конструтор - это классовая функция (class function), которая выделяет память под экземпляр и возвращает значение указателя на этот экземпляр. Точнее объяснить не могу, слов не хватает. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
габибыч

габибыч (статус: Заблокирован), 5 июля 2010, 22:30 [#3]:

(не деструктор. читать - конструктор).
не могу просто понять, когда использовать constructor, а когда просто create.
объясните как первоклашке_)
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 22:40 [#4]:

Цитата (габибыч):

не могу просто понять, когда использовать constructor, а когда просто create.

Create - это имя конструктора (читай "функции").
Объясни на конкретном примере, что напрягает. А то я, блин, не телепат ни разу.

Кстати, имя конструктора может быть любым, а деструктора - только "Destroy".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
bugmenot

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™

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

bugmenot (статус: 3-ий класс), 5 июля 2010, 23:14 [#9]:

Более того, имена Create и Destroy (или например, Init и Done) - просто семантическая конвенция
виконання програми розпочинається з того самого мiсця, де призупинилося.

габибыч

габибыч (статус: Заблокирован), 5 июля 2010, 23:15 [#10]:

я параметры не написал. явообще говорю - эти записи идентичны(примеры с constructor и Jopa)??
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 23:18 [#11]:

Цитата (Паровоз):

Имя деструктора может быть любым.

Имя деструктора должно быть "Destroy", чтобы метод "Free" его вызывал. TObject заточен так, не я это придумал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 5 июля 2010, 23:20 [#12]:

Цитата (габибыч):

я параметры не написал. явообще говорю - эти записи идентичны(примеры с constructor и Jopa)??

Это всё равно, что сравнивать холодное с мягким или квадратное с зелёным.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Паровоз

Паровоз (статус: 10-ый класс), 6 июля 2010, 10:19 [#13]:

"Имя деструктора должно быть "Destroy", чтобы метод "Free" его вызывал. TObject заточен так, не я это придумал."

Никто не заставляет для своего класса вызывать Free.
min@y™

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.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.02 сек.