Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ООП [D7, XP]


Гога ©   (2006-03-14 07:54:00) 

Здрасьсте!
У меня почему то не работает код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

type
 C_ = class(TObject)
   X: Word;
 end;

 C1 = class(C_)
   Y: Word;
 end;

 C2 = class(C_)
   Z: Word;
 end;

 C = class of C_;

var
 TC: C;
 TC1: C1;
 TC2: C2;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 TC := TC2;
end;

end.


Кароче, мне нужно зделать, чтобы одной переменной мона было присваисвать все типы, наследуемые от C_. Как это зделать?

Спасибо!


Pearled   (2006-03-14 12:30:00) [1]


> И не должно работать, потому что C и C2 несовместимые типы.
>  А для того чтобы понять "почему", нужно начать читать книжку
> по программирование, раздел "Типы".

C - метакласс, естественно они несовместимы. Но переменная типа C может содержать ссылку на класс C_ или любой из его наследников.


Плохиш   (2006-03-14 12:25:00) [2]


> Я имел в виду что переменной TC нужно присваивать не переменную
> класса C2, то есть как у автора - TC2, а сам класс, то есть
> C2. И никакой несовместимости нет. Аналогично будет работать:
>
> var
>   c: TClass;
> ....
> c:= TButton;

Лучше жевать.


Pearled   (2006-03-14 12:13:00) [3]


> > Переменная NC у тебя может содержать не объект, а класс.
>
>
> Мдя - вопрос, чем отличается класс от объекта подозреваешь?
>


Я имел в виду что переменной TC нужно присваивать не переменную класса C2, то есть как у автора - TC2, а сам класс, то есть C2. И никакой несовместимости нет. Аналогично будет работать:
var
  c: TClass;
....
c:= TButton;


tesseract   (2006-03-14 11:14:00) [4]


> Переменная NC у тебя может содержать не объект, а класс.

Мдя - вопрос, чем отличается класс от объекта подозреваешь?


Плохиш   (2006-03-14 11:11:00) [5]


> procedure TForm1.FormCreate(Sender: TObject);
> begin
>  TC := TC2;
> end;

И не должно работать, потому что Cи C2несовместимые типы. А для того чтобы понять "почему", нужно начать читать книжку по программирование, раздел "Типы".

> Pearled ©   (14.03.06 08:44) [2]

Может почитаешь для начала чего?


tesseract   (2006-03-14 11:08:00) [6]


>  TC: C_;

Объект любого типа можно трактовать, как своего родителя.
Но вот родителя, как потомка трактовать не рекомендуется.
TC:=C(TC1); - пройдёт.
TC1:=C(TC1) - нет


Гаврила   (2006-03-14 10:58:00) [7]

в смысле это ответ был
не
var
 TC: C;
а
var
 TC: C_;


Гаврила   (2006-03-14 10:57:00) [8]


>var
>  TC: C _;

(ну и названия... ужас)


Ega23   (2006-03-14 09:01:00) [9]


> Как это зделать?


Для начала рекомендую приобрести и почитать Орфографический словарь.


Pearled   (2006-03-14 08:44:00) [10]

Переменная NC у тебя может содержать не объект, а класс. Поэтому вместо tc:= tc2 пиши tc:= c2;


Virgo_Style   (2006-03-14 08:03:00) [11]

в принципе, можно просто C = TObject;


Наверх

Титульная страница Поиск, карта сайта Написать письмо