Главная страница
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.49 MB
Время: 0.069 c
6-1096456036
vasechka
2004-09-29 15:07
2004.12.05
Пауза в потоках


3-1099961565
Black
2004-11-09 03:52
2004.12.05
Как в DBGRID е узнать выбрана ли n-ая запись?


8-1094278240
X-Disa
2004-09-04 10:10
2004.12.05
TImgView32 и слои


6-1096457916
Наташа
2004-09-29 15:38
2004.12.05
Как можно скачать файл при помощи IdHTTP ?


1-1100805723
Frozzen
2004-11-18 22:22
2004.12.05
Работа с указателями