Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Двойное объявление классов [D7]


p314 ©   (2006-09-12 16:45:00) 

Смотрю чужой исходный код, в нем вот так сделано:

type
...
 TMyTimer = class;
// другие классы
...
 TMyTimer = class(TObject)
 private
   FInterval: LongWord;
...
...


Я не пойму, зачем это сделано?


Jack128_From_Tuapse   (2006-09-12 18:41:00) [1]


> Как выше сказали, что предварительные объявления делаются
> не только для этого, а для чего ещё?

для того чтоб не парится.  Проще сразу описать все классы подобным образом, чем повторять эту процедуру несколько раз, когда это становится необходимо.


p314   (2006-09-12 17:43:00) [2]

Да, я ради эксперемента решил перетащить полное объявление класса на место предварительного, а предварительное убрать. И... работает, ну во всяком случае все нормально компилируется и на первый взгляд, всё в норме. Т.е. в данном случае я так и не понял смысла в таком действии, просто не желание первым классом писать этот класс? Не знаю... Как выше сказали, что предварительные объявления делаются не только для этого, а для чего ещё?


default   (2006-09-12 17:02:00) [3]


> type
> ...
> TMyTimer = class;
>
> TOtherClss = class
> ...
> MyTimer1: TMyTimer;
> end;
> ...
> TMyTimer= class(TObject)
> private
>   FInterval: LongWord;
> //Тут нет TOtherClss!
> ...
> ...


Наиль   (2006-09-12 17:02:00) [4]

Попробуй убрать

TMyTimer = class ;
TOtherClss = class ;

Если будет работать, значит не нужен.


Сергей М.   (2006-09-12 17:01:00) [5]


> Я так понял, что это применяется, если эти классы содеражат
> "один другого"


Не только, но и в том числе.


p314   (2006-09-12 16:59:00) [6]

Ок, спасибо! Я так понял, что это применяется, если эти классы содеражат "один другого", но в моем случае картина мне все равно непонятна.

type
...
TMyTimer = class;

TOtherClss = class
...
MyTimer1: TMyTimer;
end;
...
TMyTimer = class(TObject)
private
  FInterval: LongWord;
//Тут нет TOtherClss!
...
...


Т.е. в моем случае в полном объявлении класса TMyTimer, он не ссылается на TOtherClss. Что это такое?


default   (2006-09-12 16:48:00) [7]

смотри в хелпе по ключу "forward declaration"


Сергей М.   (2006-09-12 16:48:00) [8]

Это предварительное объявление.

Оно необходимо, например, в таких случаях:

 TMyClass = class;
...

 TMyOtherClass = class
..
 FMyClass: TMyClass;
..
 end;

..

TMyClass = class
..
  FMyOtherClass: TMyOtherClass;
..
 end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо