Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-50466
Леприкон
2003-05-30 07:22
2003.06.16
Начинающим программистам. Этап 5.


1-50270
OlegM
2003-06-03 09:05
2003.06.16
Устойчивая подсказка


1-50302
кто-то
2003-06-04 18:17
2003.06.16
Как встроить ActiveX в HTML?


8-50407
grei
2003-03-03 20:15
2003.06.16
gif, gif, gif, gif, gif, gif...


7-50537
jonni
2003-04-12 22:50
2003.06.16
Как запретить открутие папки с файлами под Win98





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский