Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

           Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
           И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - https://clck.ru/fCqwP

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2008, 16:05   #1
master_root
Пользователь
 
Регистрация: 18.05.2008
Сообщений: 30
Восклицание Переопределение операций(сложение,вычитание...)

Переопределяю стандартную операцию вычитания для моего класса. Делаю всё как написано в справке к моей BDS 2005:
Код:
class operator Subtract(a, b: TNumSys): TNumSys;virtual;abstract;
где
TNumSus - имя моего класса внутри которого я переопределяю операцию вычитания,
virtual;abstract; - объявляю его виртуальным и абстрактным, т.к. алгоритм его работы полностью должен определяться в дочерних классах.

Компилятор на синтаксис не ругается, но прикомпиляции выдаёт аж 5 ошибок только по одной этой строчке:
[Pascal Error] numsys_concept.pas(32): E2123 PROCEDURE, FUNCTION, PROPERTY, or VAR expected
[Pascal Error] numsys_concept.pas(32): E2029 ',' or ':' expected but '(' found
[Pascal Error] numsys_concept.pas(32): E2029 ';' expected but ':' found
[Pascal Error] numsys_concept.pas(32): E2029 ',' or ':' expected but ';' found
[Pascal Error] numsys_concept.pas(33): E2058 Class, interface and object types only allowed in type section


Помогите пожалуйста разобраться. Что делать?
master_root вне форума Ответить с цитированием
Старый 18.06.2008, 16:22   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,238
Сообщение

может всётаки override ?
Alter вне форума Ответить с цитированием
Старый 18.06.2008, 18:24   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

class operator само по себе override (точнее overload).
Не нужно описывать операцию как виртуальную и тем более абстрактную. Это не допускается синтаксисом.

Но судя по тому, что пишет компилятор, проблема не в этом.
Из Developer Studio 2006 Reference:
Цитата:
Delphi for .NET and Delphi for Win32 allow certain functions, or "operators" to be overloaded within record
declarations. Delphi for .NET also allows overloading within class declarations.
...
Records allow operator overloading on the Win32 and .NET platforms;
classes allow operator overloading only for .NET.
Попробуйте то-же самое для record:
Код:
type
   TMyClass = record
   public
      class operator Subtract(const a, b: TMyClass): TMyClass;
Для class перегрузка поддерживается только для .NET.
К сожалению у меня не на чем это проверить. В File/New у меня только VCL Application Delphi for Win32

Последний раз редактировалось alexBlack; 18.06.2008 в 18:48.
alexBlack вне форума Ответить с цитированием
Старый 18.06.2008, 20:20   #4
master_root
Пользователь
 
Регистрация: 18.05.2008
Сообщений: 30
По умолчанию

>AlexBlack
спасибо.
master_root вне форума Ответить с цитированием
Ответ

           Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
           Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Используя двоичное счисление, произвести вычитание freddy Помощь студентам 3 02.06.2008 22:41
Переопределение реакции на события ByWatt Общие вопросы Delphi 1 20.12.2007 17:22
Переопределение операций toeman Общие вопросы C/C++ 2 20.11.2007 11:21
вычитание даты zetrix Microsoft Office Excel 3 10.11.2006 06:30