Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

Перекрытие конструктора с расширенным набором параметров   Найти похожие ветки 

 
FunkyByte ©   (2006-01-21 14:56) [0]

Доброго времени суток, уважаемые мастера. При написании класса-потомка TForm возникла необходимость перекрыть конструктор, добавив в новом конструкторе 2 дополнительных параметра. Пытался реализовать так:

...
type
 TMyClass=class(TForm)
   ...
 public
   constructor Create(AOwner: TComponent; NewParam1, NewParam2: Extended); override;
   ...
 end;
...

Компиллятор выдаёт ошибку Declaration of "Create" differs from previous declaration. Как можно решить эту проблему? Заранее благодарен.


 
begin...end ©   (2006-01-21 15:03) [1]

Замените override на reintroduce.


 
Anatoly Podgoretsky ©   (2006-01-21 15:04) [2]

FunkyByte ©   (21.01.06 14:56)  
Перекрытие с разным набором невозможно в языке.
Можно сделать перегрузку или скрыть старый метод.


 
Sergey Masloff   (2006-01-21 16:23) [3]

reintroduce просто давит предупреждение о скрытии базового виртуального метода. Если старый конструктор тоже нужен (в новом классе хочется писать) тогда все же overload


 
Sergey Masloff   (2006-01-21 16:38) [4]

я торможу. В теме ж написано перекрытие...


 
begin...end ©   (2006-01-21 17:02) [5]

> Sergey Masloff   (21.01.06 16:23) [3]

> Если старый конструктор тоже нужен (в новом классе хочется
> писать) тогда все же overload

Если старый конструктор нужен в том смысле, что его предполагается вызывать из методов потомка, то подойдёт и reintroduce.


 
Alexander Panov ©   (2006-01-21 17:03) [6]


> Компиллятор выдаёт ошибку Declaration of "Create" differs
> from previous declaration. Как можно решить эту проблему?
>  Заранее благодарен.


У тебя явно ошибка выдается в секции implementation, а не в приведенном коде.
Кроме того, убери override.

В реализации нового колнструктора вначале можешь вызвать
inherited Create(...);

К тому же, конструктров может быть несколько, необязательно называть новый конструктор так же, как в родительском классе.


 
begin...end ©   (2006-01-21 17:10) [7]

> Alexander Panov ©   (21.01.06 17:03) [6]

> У тебя явно ошибка выдается в секции implementation, а не
> в приведенном коде.

Почему это?


 
Fay ©   (2006-01-21 17:46) [8]

2 FunkyByte ©   (21.01.06 14:56)
constructor Create(AOwner: TComponent; NewParam1, NewParam2: Extended); reintroduce;


 
Alexander Panov ©   (2006-01-21 18:39) [9]

>begin...end

> Почему это?


Ошибся, сообщение действительно здесь будет.


 
SergP.   (2006-01-21 18:43) [10]

Кстати, пользуясь случаем и я задам вопросик...

У меня аналогично используется перегрузка (overload)

но как избавиться от варнинга, который уже задолбал?

[Warning] ViewHist.pas(34): Method "Create" hides virtual method of base type "TCustomForm"


 
begin...end ©   (2006-01-21 18:46) [11]

> SergP.   (21.01.06 18:43) [10]

reintroduce


 
Fay ©   (2006-01-21 18:49) [12]

Ответы кто-нибудь читает?


 
SergP ©   (2006-01-21 21:06) [13]


> begin...end ©   (21.01.06 18:46) [11]
> > SergP.   (21.01.06 18:43) [10]
>
> reintroduce


дык в том то и дело что reintroduce не проходит...Поэтому и спрашивал... С reintroduse  вообще Error.


 
SergP ©   (2006-01-21 21:15) [14]

Просто старый конструктор используется как и в методах данного класса, так и из других юнитов...


 
SergP ©   (2006-01-21 21:24) [15]

Кстати если использовать reintroduсe, то компиляция (ctrl+F9) проходит без ошибок, а вот если сделать build  то и вылазит ошибка
[Error] main.pas(737): Incompatible types: "Byte" and "TApplication"

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


 
begin...end ©   (2006-01-21 21:35) [16]

> SergP ©   (21.01.06 21:15) [14]

> Просто старый конструктор используется как и в методах данного
> класса, так и из других юнитов...

constructor Create(...); reintroduce; overload;


 
SergP ©   (2006-01-21 21:48) [17]


> begin...end ©   (21.01.06 21:35) [16]
> > SergP ©   (21.01.06 21:15) [14]
>
> > Просто старый конструктор используется как и в методах
> данного
> > класса, так и из других юнитов...
>
> constructor Create(...); reintroduce; overload;


блин... действительно так работает.
а я пробовал и
constructor Create(...);  overload;
и
constructor Create(...);  reintroduce;
и
constructor Create(...);  overload; reintroduce;

и не мог понять почему компилятор ругался... :-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1137446511
ReBlock
2006-01-17 00:21
2006.02.05
Печать из файла


2-1137486304
Rentgen
2006-01-17 11:25
2006.02.05
Убрать системное меню у компонента TShellListView


2-1137451488
fedor
2006-01-17 01:44
2006.02.05
Подскажите что вызывает ошибку?


15-1137421445
Ega23
2006-01-16 17:24
2006.02.05
Вопрос StarCraft ерам


15-1136997481
QwertyKz
2006-01-11 19:38
2006.02.05
Поиск окружностей





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