Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 339
от 01.06.2004, 08:30

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1581
Отправлено ответов: 3679
Активность: 232.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Boriss
Статус: Профессиональный
Общий рейтинг: 163.41
URL: Программирование на Паскале
[Подробней >>]
samum2000
Статус: Профессиональный
Общий рейтинг: 129.7
URL: Samums home page
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 109.3
[Подробней >>]
 
Andy
Статус: Опытный
Общий рейтинг: 101.82
[Подробней >>]
CrackLab
Статус: Опытный
Общий рейтинг: 140.6
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 162.68
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1570. Уважаемые Эксперты. Начинаю изучать Delphi. Пожалуйста объясните мне попонятнее что такое конструкто... (ответов: 6)

Вопросов: 1, ответов: 6


 Вопрос № 1570

Уважаемые Эксперты.
Начинаю изучать Delphi. Пожалуйста объясните мне попонятнее что такое конструктор и деструктор. Что значит "конструктор вызывается при создании переменной" Мы же ее объявляем в разделе Var.
заранее благодарен.



Вопрос отправлен: 28.05.2004, 15:37
Отправитель: Владислав (ivchencov@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Доброе время суток, Владислав!
В разделе TYPE мы только описываем структуру такой сложной конструкции, как объект (класс - лучше говорить). Затем определяем переменную этого типа - говорят - создаем экземпляр объекта (в нынешней терминологии, просто, объект). Но она еще не заполнена необходимыми данными, в ней есть внутренние ссылки - их нужно проиницализировать. Это то и делает метод - констрактор (это почти обычная процедура), но она еще умеет и правильно размещать объект в оперативной памяти.
constructor TMyClass.Create;
А раз разместили - память объект занимает, то нужно и удалять его оттуда - это делает метод, который "имеет тип" дестрактор (destructor).

Ответ отправлен: 28.05.2004, 16:21
Отправитель: Boriss


Отвечает samum2000


Доброго времени суток, Владислав!
Конструктор и деструктор по сути своей процедуры-члены класса, которые выполняют необходимые действия (выделение/освобождение памяти под объект, установка начальных значений полей и т.п.).
Поэтому конструктор вызывается при создании объекта (под объектом подразумевают как раз переменную, типом которой является некоторый класс). А в разделе Var ты только указываешь, что переменная эта принадлежит классу такому-то.
--------------------------
-=Experts helper: testmode=-

Ответ отправлен: 30.05.2004, 19:14
Отправитель: samum2000


Отвечает vitya

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

Ответ отправлен: 29.05.2004, 13:18
Отправитель: vitya


Отвечает Andy

Приветствую Вас, Владислав!
Вот когда ты её там объявляешь, то вы зывается конструктор.
А когда эта переменная уничтожается, то вызывается деструктор.
P.S. И то и другое процедуры.

Ответ отправлен: 28.05.2004, 15:52
Отправитель: Andy


Отвечает CrackLab

Здравствуйте, Владислав!
При работе с классами и объектами классов необходима инициализация (выделение памяти, задания начальных значений). Для решения проблемы инициализации и деинициализации существуют функция-конструктор и функция-деструктор.
Конструктор обычно используется для задания начального значения переменных объекта, выделения памяти и т.д.
Деструктор обычно используется для освобождеия памяти занимаемой объектом.
функция конструктор объявляется в классе с помощью ключевого слова constructor, например
constructor Create(x, y : integer);
функция деструктор объявляется в классе с помощью ключевого слова destructor, например
destructor Destroy();
В С++ конструктор объекта вызывается при объявлении объекта. В Delphi же, такого не происходит, и инициализацию (вызов конструктора) приходится производить самому.
Например у нас есть такой класс MyClass:
type
MyClass = class
i,j,k : integer;
end;
Допустим что при работе с объектом класса MyClass нам всегда нужно задавать начальные значения i,j,k. Мы можем написать так:
var
MyObject : MyClass;
begin
MyObject := MyClass.Create; // Вызов родительского конструктора класса TObject для выделения памяти объекту
MyObject.i := 5;
MyObject.j := 10;
MyObject.k := 15;
А можем добавить в класс конструктор:
type
MyClass = class
i,j,k : integer;
constructor MyClass.Create(_i, _j, _k : integer);
end;
constructor MyClass.Create(_i, _j, _k : integer);
begin
i := _i; j := _j; k := _k;
end;
И проинициализировать наш объект так:
var
MyObject : MyClass;
begin
MyObject := MyClass.Create(5,10,15);
Думаю смысл конструкторов понятен, хотя мой пример слабо отражает необходимость конструкторов. Но тем не менее они необходимы всегда, как минимум для выделения памяти объекту.

Ответ отправлен: 29.05.2004, 22:16
Отправитель: CrackLab


Отвечает sir henry

Здравствуйте, Владислав!
Конструктор - это процедура, которая вызывается при создании переменной типа объект (класс). Для переменной обычного типа (string, integer) конструктор, конечно, не нужен. Однако при создании переменной типа объект(класс) должны создаваться некоторые сопутствующие вещи, например инициализироваться некоторые свойства или, например, меняться разрешение экрана. Вот как раз для создания этих вещей и служит конструктор.
Деструктор - уничтожитель, т.е. он делает все наоборот :).
Примеры можно посмотреть в исходниках самого Дельфи, поэтому приводить я их не буду. Ищите контекстным поиском слово CONSTRUCTOR.

Ответ отправлен: 31.05.2004, 04:04
Отправитель: sir henry



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (20)
C / C++ (15)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (3)
Java / JavaScript (4)
PHP (13)
Криптография (7)
WinAPI (8)
Радиоэлектроника (10)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (49)
"Железо" (30)
Поиск информации (16)
Администратору
Windows NT/2000/XP (21)
Linux / Unix (7)
Юристу
Гражданское право (13)
Семейное право (10)
Трудовое право (12)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное