Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.16;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-50430
Soft
2003-05-28 13:09
2003.06.16
САГА О ПРОГРАММИСТАХ-КУДЕСНИКАХ (страшилка в стихах и прозе)


1-50299
TAV
2003-06-04 17:30
2003.06.16
ComboBox в StringGrid е


1-50381
1977
2003-06-04 11:37
2003.06.16
Кнопка на панели задач...


1-50333
VD601
2003-06-02 21:43
2003.06.16
О тос, как передаются данные.


1-50374
pathfinder
2003-06-04 01:20
2003.06.16
opendialog.filename...