Главная страница
    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.035 c
4-1098187155
*Pavel
2004-10-19 15:59
2004.12.05
Корректировка ресурса


3-1099552867
sapsi
2004-11-04 10:21
2004.12.05
Название столбца грида


3-1099897472
karat
2004-11-08 10:04
2004.12.05
Про работу SQL серверов и возвращаемый набор данных.


1-1100689354
Dima
2004-11-17 14:02
2004.12.05
Thread и ассемблер


4-1098633252
_Дельфин_
2004-10-24 19:54
2004.12.05
Параметры монитора





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