Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

Объясните   Найти похожие ветки 

 
Imbalance   (2006-01-08 23:58) [0]

Вот код, почему вместо procedure пишут constructro и destructor? Нельзя ли как тут написать procedure?Объясните
  TClass=class;
    private
    public
       procedure Create;
       procedure Destroy;
    end;
За ранее спасибо


 
Bogdan1024 ©   (2006-01-09 00:37) [1]

A constructor is a special method that creates and initializes instance objects. The declaration of a constructor looks like a procedure declaration, but it begins with the word constructor.
constructor пишется для понятности что это за процедура. Аналогично с destructor.


 
McSimm ©   (2006-01-09 00:54) [2]

нельзя.
чтобы работать с экземпляром объекта необходимо его создать.

SomeVar  := TSomeClass.Create;

Вы в своей процедуре можете только проинициализировать объект, но чтобы он был создан (выделена память, построены таблицы) и указатель на все это был возвращен - необходим конструктор.

Аналогично для целей разрушения экземпляра (и освобожления ресурсов) необходим деструктор. В процедуре вы можете освободить только выделенную вами память, но память отведенную под сам экземпляр (конструктором) тоже надо освобождать.


 
McSimm ©   (2006-01-09 00:57) [3]

читайте, пожалуйста, правила форума


 
Джо ©   (2006-01-09 01:06) [4]

По сути, это просто частный специализированный случай классовых методов (class procedure, class function), в отличие от методов экземпляра.


 
palva ©   (2006-01-09 01:18) [5]

Наверно, можно. Если конструктор с именем, отличным от Create имеется в самом классе или наследуемом классе, то почему бы не завести в классе процедуру Create. Другой вопрос - для какой цели, что вы поручите делать этой процедуре.


 
Джо ©   (2006-01-09 01:20) [6]

> [4] Джо ©   (09.01.06 01:06)

Это относится только к Create, разумеется.


 
ЮЮ ©   (2006-01-09 07:38) [7]

>Это относится только к Create, разумеется.

и к Create, ИМХО, это тоже не относится, т.к. в конструкторе вполне легально можно обращаться к полям экземпляра класса, чего не сделаешь в методе класса.


 
Piter ©   (2006-01-09 14:53) [8]

ЮЮ ©   (09.01.06 7:38) [7]
чего не сделаешь в методе класса.


может быть, в "классовом методе"? :)


 
Джо ©   (2006-01-09 15:00) [9]

> [7] ЮЮ ©   (09.01.06 07:38)

Подумал я тут... И решил, что ваша поправка как-раз, на мой взгляд, прекрасно входит в понятие "специализированный случай" в моем определении  [4]. Ибо, как ни крути, конструктор имеет черты и классовых и регулярных  методов.
:)


 
Гаврила ©   (2006-01-10 11:06) [10]

Ну, это уж получается совсем специализированный случай.
Собственно, зачем нужно указание "constructor"
это прямое указание компилятору, что при вызове метода, помеченного как "constructor" (именно при вызове от класса, а не от экземпляра) его (экземпляр) нужно создать(перед выполнением тела метода)
Собственно, зачем нужно указание "destructor"
это прямое указание компилятору, что при вызове метода, помеченного как "destructor" экземпляр нужно разрушить (после выполнения тела метода)
и все.


 
Amoeba ©   (2006-01-10 13:17) [11]

Если метод объявлен как constructor или destructor, то компилятор невидимо для программиста добавляет код создающий/разрушающий экземпляр объекта. Если эти волшебные слова не использовать, то при вызове простого метода объект не будет создан/разрушен.


 
Piter ©   (2006-01-10 14:59) [12]

Amoeba ©   (10.01.06 13:17) [11]
то при вызове простого метода объект не будет создан/разрушен.


зато это можно сделать вручную, с помощью NewInstance :)


 
Leonid Troyanovsky ©   (2006-01-10 16:02) [13]


> Джо ©   (09.01.06 15:00) [9]

> имеет черты и классовых и регулярных  методов.


Constructors and destructors use the same calling conventions as other methods, except that an additional Boolean flag parameter is passed to
indicate the context of the constructor or destructor call.

--
Regards, LVT.


 
Плохиш ©   (2006-01-10 17:00) [14]


> Imbalance   (08.01.06 23:58)  
> Вот код, почему вместо procedure пишут constructro и destructor?

Это соглашения языка программирования.


 
Джо ©   (2006-01-10 17:13) [15]

> [13] Leonid Troyanovsky ©   (10.01.06 16:02)
> Constructors and destructors use the same calling conventions
> as other methods, except that an additional Boolean flag
> parameter is passed to
> indicate the context of the constructor or destructor call.

Ну, это детали реализации.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.058 c
15-1136629806
diwwww
2006-01-07 13:30
2006.01.29
Можно ли расчитать КПП?


15-1136501920
Profi
2006-01-06 01:58
2006.01.29
Вопрос к Piter у


3-1132756175
ASDF234
2005-11-23 17:29
2006.01.29
Надо засунуть с текстового файла данные в DBGRID.


2-1136969198
pupapumD
2006-01-11 11:46
2006.01.29
Командная строка.....


6-1129727738
Sergey840
2005-10-19 17:15
2006.01.29
IdHTTP (Загрузка страницы с 404 ошибкой)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский