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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.027 c
2-1137461267
Kostik
2006-01-17 04:27
2006.02.05
Функция перевода строки из русской в английскую и наоборот.


2-1137673562
Mike48
2006-01-19 15:26
2006.02.05
как объединить ячейки в DBGrid и Exel?


2-1137886526
NiksoN
2006-01-22 02:35
2006.02.05
Помогите ПИЛИЗ!!!


15-1137056416
Хинт
2006-01-12 12:00
2006.02.05
Проблема с FTP


15-1137503871
IceBeerg
2006-01-17 16:17
2006.02.05
Самовольный dualup