Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
ВнизКак перекрыть абстрактную функцию с другими параметрами? Найти похожие ветки
← →
ГостьНомер (2006-06-20 14:22) [0]Я хочу запускать свою функцию в потоке TMyThread. У функции есть параметры.
Как мне объявить метод Execute моего класса так, чтобы он принимал параметры и мог передать их функции?
Объявляю так:
TMyThread = class (TThread)
procedure execute (a:real); override;
end;
И реализация:
procedure TMyThread.execute (a:real);
begin
MyFunction(a);
end;
Выдает ошибку Declaration of "execute" differs from previous declaration,
что вполне ожидаемо. Без override в runtime получаем Abstract Error.
Пробовал думать. Пробовал добавлять reintroduce, virtual, overload в разных комбинациях.
Не получилось. Как передать параметры, не используя глобальных переменных?
← →
tesseract © (2006-06-20 14:23) [1]
> Как передать параметры, не используя глобальных переменных?
просто, делам функцию myExecute и вызываем её из execute.
больше никаких проблем.
← →
Сергей М. © (2006-06-20 14:30) [2]
> Пробовал думать
Плохо пробовал думать.
Или Пробовал плохо думать.
Или не думал вообще.
Виртуальный метод м.б. перекрыт методом с той же декларрацией, что и перекрываемый метод.
Object Pascal, понимаешь ли .. Выше штанов не прыгнешь)
← →
oleg__ (2006-06-20 14:44) [3]TObj1 = class
procedure Execute(a: int); virtual;
TObj2 = class(TObj1)
procedure Execute(s: string; a: int); reintroduce;
TObj2.Execute(s: string; a: int);
begin
inherited Execute(a);
// свой код
................
← →
icWasya © (2006-06-21 09:42) [4]После таких [3] ответов появится серия вопросов
1) почему у меня поток не запускается
2)почему у меня Access violation
3) ещё что нибудь
Execute у TThread Вы никогда явно не вызываете!
Скорее всего Вам нужно сделать такИнтерфейс:
TMyThread = class (TThread)
private
Fa : real;
public
procedure execute ; override;
constructor Create(a:real);
end;
И реализация:
constructor TMyThread.Create(a:real);
begin
Fa:=a;
inherited Create;
end;
procedure TMyThread.execute;
begin
MyFunction(Fa);
end;
← →
ГостьНомер (2006-06-22 13:14) [5]2icWasya Огромное спасибо. Действительно, мы создаем поток create(false), и он сам вызывает execute. Все заработало.
← →
Сергей М. © (2006-06-22 13:54) [6]
> абстрактную функцию
Разницу между функциональным и процедурным методом объекта ощущаешь ?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c