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

Вниз

Подскажите пожалуйста по поводу модуля 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.046 c
6-1096023735
Wolfram
2004-09-24 15:02
2004.12.05
Работа с vCard


3-1099463364
Sour
2004-11-03 09:29
2004.12.05
MySQL


1-1100850063
vovchik
2004-11-19 10:41
2004.12.05
Предача параметров для exe


14-1100704225
Pavel_levaP
2004-11-17 18:10
2004.12.05
разбилась матрица на ноутбуке


4-1096510724
The-13th-Angel
2004-09-30 06:18
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский