Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизООП Найти похожие ветки
← →
Гога (2006-03-14 07:54) [0]Здрасьсте!
У меня почему то не работает код: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_. Как это зделать?
Спасибо!
← →
Virgo_Style © (2006-03-14 08:03) [1]в принципе, можно просто
C = TObject
;
← →
Pearled © (2006-03-14 08:44) [2]Переменная NC у тебя может содержать не объект, а класс. Поэтому вместо tc:= tc2 пиши tc:= c2;
← →
Ega23 © (2006-03-14 09:01) [3]
> Как это зделать?
Для начала рекомендую приобрести и почитать Орфографический словарь.
← →
Гаврила © (2006-03-14 10:57) [4]
>var
> TC: C_;
(ну и названия... ужас)
← →
Гаврила © (2006-03-14 10:58) [5]в смысле это ответ был
не
var
TC: C;
а
var
TC: C_;
← →
tesseract © (2006-03-14 11:08) [6]
> TC: C_;
Объект любого типа можно трактовать, как своего родителя.
Но вот родителя, как потомка трактовать не рекомендуется.
TC:=C(TC1); - пройдёт.
TC1:=C(TC1) - нет
← →
Плохиш © (2006-03-14 11:11) [7]
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> TC := TC2;
> end;
И не должно работать, потому что C и C2 несовместимые типы. А для того чтобы понять "почему", нужно начать читать книжку по программирование, раздел "Типы".
> Pearled © (14.03.06 08:44) [2]
Может почитаешь для начала чего?
← →
tesseract © (2006-03-14 11:14) [8]
> Переменная NC у тебя может содержать не объект, а класс.
Мдя - вопрос, чем отличается класс от объекта подозреваешь?
← →
Pearled © (2006-03-14 12:13) [9]
> > Переменная NC у тебя может содержать не объект, а класс.
>
>
> Мдя - вопрос, чем отличается класс от объекта подозреваешь?
>
Я имел в виду что переменной TC нужно присваивать не переменную класса C2, то есть как у автора - TC2, а сам класс, то есть C2. И никакой несовместимости нет. Аналогично будет работать:var
c: TClass;
....
c:= TButton;
← →
Плохиш © (2006-03-14 12:25) [10]
> Я имел в виду что переменной TC нужно присваивать не переменную
> класса C2, то есть как у автора - TC2, а сам класс, то есть
> C2. И никакой несовместимости нет. Аналогично будет работать:
>
> var
> c: TClass;
> ....
> c:= TButton;
Лучше жевать.
← →
Pearled © (2006-03-14 12:30) [11]
> И не должно работать, потому что C и C2 несовместимые типы.
> А для того чтобы понять "почему", нужно начать читать книжку
> по программирование, раздел "Типы".
C - метакласс, естественно они несовместимы. Но переменная типа C может содержать ссылку на класс C_ или любой из его наследников.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c