Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Подскажите пожалуйста по поводу модуля Menus   Найти похожие ветки 

 
Dmitry_04   (2004-11-22 20:51) [0]

Подскажите пожалуйста по поводу модуля Menus... Объясните почему в начале тип TMenuItem описан так:

type
 TMenuItem = class;

а после описания нескольких других типов опятьже описан, только по другому:

TMenuItem = class(TComponent)
 private
   ...
 protected
   ...
 public
   ...
 published
   ...
 end;

Как это понимать?


 
GuAV ©   (2004-11-22 20:55) [1]

If the declaration of a class type ends with the word class and a semicolon--that is, if it has the form

type className = class;

with no ancestor or class members listed after the word class--then it is a forward declaration. A forward declaration must be resolved by a defining declaration of the same class within the same type declaration section. In other words, between a forward declaration and its defining declaration, nothing can occur except other type declarations.

Forward declarations allow mutually dependent classes. For example,

type
 TFigure = class;  // forward declaration
 TDrawing = class
   Figure: TFigure;
    ...
 end;
 TFigure = class  // defining declaration
   Drawing: TDrawing;
    ...
 end;

Do not confuse forward declarations with complete declarations of types that derive from TObject without declaring any class members.

type
 TFirstClass = class;           // this is a forward declaration
 TSecondClass = class           // this is a complete class declaration
   end;                         //
 TThirdClass = class(TObject);  // this is a complete class declaration


 
Dmitry_04   (2004-11-22 20:58) [2]

GuAV Ты меня извени, я в английском не очень силен, объясни пожалуйста по русски


 
Dmitry_04   (2004-11-22 21:17) [3]

???


 
begin...end ©   (2004-11-22 21:22) [4]


> [2] Dmitry_04   (22.11.04 20:58)

Я понимаю так... В пределах одной секции описания типов (секции type) можно сначала дать краткое опережающее описание, а потом - обычное полное. В том же модуле Menus объявленный кратко тип TMenuItem используется, например, в объявлении типа TMenuChangeEvent (несколькими строками ниже). Ну захотелось так разработчикам расположить эти объявления, - это их право...
А после этого даётся обычное объявление TMenuItem - с описанием полей, методов, свойств и т.д. Вот это и будет тип TMenuItem. А вначале он был кратко объявлен для того, чтобы указать, что такой класс вообще есть, чтобы его имя можно было указать в описании TMenuChangeEvent, а что это конкретно за TMenuItem, дорогой компилятор, - узнаешь позже... :-)

P.S. Но я могу заблуждаться...


 
GuAV ©   (2004-11-22 21:32) [5]

Dmitry_04   (22.11.04 20:58) [2]
Даже понимать английский особо не нужно просто рассмотри код в примере.

begin...end ©   (22.11.04 21:22) [4]
Всё вроде верно.


 
begin...end ©   (2004-11-22 21:35) [6]


> [5] GuAV ©   (22.11.04 21:32)


> Даже понимать английский особо не нужно просто рассмотри
> код в примере.

Так этта... Код в примере - он ведь тоже... на английском... :-))


 
Dmitry_04   (2004-11-22 21:44) [7]

begin...end Может быть конечно... но почему бы тогда сразу его не описать какой он есть...:)


 
GuAV ©   (2004-11-22 21:45) [8]

Dmitry_04   (22.11.04 21:44) [7]
Может один класс использует другой а тот в свою очередь первый. Посмотри таки пример из справки в [1].


 
Dmitry_04   (2004-11-22 22:10) [9]

а может все намного проще? До объявления типа как:

TMenuItem = class(TComponent)
private
  ...
protected
  ...
public
  ...
published
  ...
end;

используется как:

type
TMenuItem = class;

Но можно ли объявлять по разному два одноименных типа?


 
GuAV ©   (2004-11-22 23:13) [10]

Dmitry_04   (22.11.04 22:10) [9]
Но можно ли объявлять по разному два одноименных типа?

Можно. Только тогда это будут два разных типа, даже если объявления будут совпадать.

Dmitry_04   (22.11.04 22:10) [9]
а может все намного проще?

Тогда как ???



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.042 c
3-1099553813
Брат
2004-11-04 10:36
2004.12.05
Создание хранимой процедуры программно


6-1096015185
RoMka
2004-09-24 12:39
2004.12.05
IP адрес машины, находящейся в другой рабочей группе?


1-1100803459
Ivan1
2004-11-18 21:44
2004.12.05
перевод чисел в числа словами


14-1100620668
вразлет
2004-11-16 18:57
2004.12.05
Как давно и при каких обстоятельствах Вы появились на ресурсе?


3-1099493944
denis24
2004-11-03 17:59
2004.12.05
динамический report





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