Форум: "Потрепаться";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
Внизinherited, override Найти похожие ветки
← →
Vertex3f (2003-05-31 14:41) [0]1) Что будет (то есть все ли будет нормально) если при определении конструктора у класса я не напишу override? Вот так:
TAbc = class
constructor Create(...);
end;
2) Что будет (...) если в конструкторе я не напишу inherited?
constructor Create(...);
begin
//inherited;
...
end;
Спасибо...
← →
Palladin (2003-05-31 14:43) [1]1) ничего не будет
2) не напишешь, не вызовешь перекрытый конструктор
справку читайте...
← →
Anatoly Podgoretsky (2003-05-31 15:01) [2]Зависит от судьбы.
← →
vuk (2003-05-31 15:02) [3]to Vertex3f:
1. В том примере, что Вы привели, действительно не будет ничего. Более того, если Вы напишете override, то это будет ошибкой, т.к. у TObject нет виртуального конструктора. Если же предком будет, например, TComponent, то во-первых, будет некорректная инициализация при загрузке формы, т.к. вызовется не Ваш конструктор, а унаследованный виртуальный, а во-вторых исходный конструктор станет недоступен, о чем компилятор Вас честно предупредит.
← →
Palladin (2003-05-31 15:12) [4]
> vuk © (31.05.03 15:02)
ничего не будет вообще, ибо конструкторы прекрасно перекрываются и без override;
type
tclass1=class
public
constructor create(s:string);
end;
tclass2=class(tclass1)
public
constructor create;
end;
constructor tclass1.create;
begin
Application.MessageBox(pchar(s),"wor");
end;
constructor tclass2.create;
begin
inherited create("dfdfd");
end;
запусти и создай tclass2
или может я сам чего то не догоняю?
← →
Юрий Зотов (2003-05-31 15:23) [5]> Palladin © (31.05.03 15:12)
Вы привели пример со статическими конструкторами, о которых vuk так и сказал - "не будет ничего" (и даже добавил: "Более того, если Вы напишете override, то это будет ошибкой..."). Таким образом, своим примером Вы подтвердили его слова.
А далее vuk говорил о виртуальных конструкторах, для которых неуказание override разрывает цепочку наследования. Ваш пример не из этой серии.
← →
Palladin (2003-05-31 16:24) [6]да, согласен
раз я так бессовестно кратко ответил на первый пункт, то приведу пример который показывет различия присутствия override и отстутвия такового
type
tclass1=class
public
constructor create(s:string); overload; // статический конструктор
constructor create; overload; virtual; // виртуальный
end;
tclass2=class(tclass1)
public
constructor create; // поиграйся с ключевым словом Override; результаты будут интересны, так же почитай warnings
end;
tmyclasses=class of tclass1;
constructor tclass1.create(s:string);
begin
Application.MessageBox(pchar(s),"Info");
end;
constructor tclass1.create;
begin
Application.MessageBox("TClass1.Create; virtual;","Info");
end;
constructor tclass2.create;
begin
inherited create("TClass2.Create;");
end;
procedure TForm1.Button1Click(Sender: TObject); // кнопка
var
o:tclass1;
begin
o:=TMyClasses(TButton(Sender).Tag).Create;
end;
procedure TForm1.FormCreate(Sender: TObject); // при создании формы
begin
Button1.Tag:=integer(tclass2);
end;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c