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

Вниз

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

 
p314   (2006-09-12 16:45) [0]

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

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


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


 
default ©   (2006-09-12 16:48) [1]

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


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

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

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

 TMyClass = class;
...

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

..

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


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

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

type
...
TMyTimer = class;

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


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


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


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


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


 
default ©   (2006-09-12 17:02) [5]


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


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

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

TMyTimer = class;
TOtherClss = class;

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


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

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


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


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

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



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

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

Наверх




Память: 0.46 MB
Время: 0.022 c
10-1122298074
Oleg_
2005-07-25 17:27
2006.10.01
com без регистрации в реестре


2-1157898698
Juri
2006-09-10 18:31
2006.10.01
Обработка ошибок при отправлении E-Mail


9-1136242899
aleccc
2006-01-03 02:01
2006.10.01
opengl


1-1156182035
TTreeView
2006-08-21 21:40
2006.10.01
Олег


3-1154405567
AVK
2006-08-01 08:12
2006.10.01
Oracle. Проблема c вызовом функций. DAO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский