Процедуры

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Процедуры

Сообщение trexxet » 13.10.2013 18:25:10

Имеется 2 процедуры
Код: Выделить всё
procedure CheckTB( Button: PRectTextButton; Down: boolean = False );
procedure CheckIB( Button: PRectImgButton; Down: boolean = False );

Их содержимое абсолютно одинаковое, различаются только типом аргумента
Можно ли объединить их в одну?
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Re: Процедуры

Сообщение zub » 13.10.2013 21:23:00

Можно если типы PRectTextButton и PRectImgButton имеют общего предка и функционал предостовляемый этим предком достаточен для выполнения процедуры. получится чтото типа
Код: Выделить всё
procedure CheckB( Button: PRectAbstractButton; Down: boolean = False );
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Процедуры

Сообщение trexxet » 14.10.2013 10:25:01

Забыл написать про типы
Код: Выделить всё
  PRectTextButton = ^TRectTextButton;
  TRectTextButton = record
    Rect: zglTRect;
    Alpha: byte;
    Color: longword;
    Text: UTF8String;
    TextScale: single;
    TextColor: longword;
    OnClick: TOnClick;
  end;

  PRectImgButton = ^TRectImgButton;
  TRectImgButton = record
    Rect: zglTRect;
    Img: zglPTexture;
    OnClick: TOnClick;
  end;

Записи вроде не наследуются, а в классы переделывать не хочется. Перегрузка процедуры не будет глючить?
Код: Выделить всё
procedure CheckB( Button: PRectTextButton; Down: boolean = False ); overload;
procedure CheckB( Button: PRectImgButton; Down: boolean = False ); overload;
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Re: Процедуры

Сообщение VirtUX » 14.10.2013 12:12:26

overload не обязателен. Работать будет. Параметры процедуры являются таким же идентификатором как и само название. Т.ч. разные параметры - это разные процедуры.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Процедуры

Сообщение hinst » 14.10.2013 19:42:07

сделай object'ы
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Процедуры

Сообщение zub » 14.10.2013 20:00:56

>>Записи вроде не наследуются, а в классы переделывать не хочется. Перегрузка процедуры не будет глючить?
Записи не наследутся, но возможен "хак" - третий тип записи имеющий минимальное важное общее начало записей первого и второго типа - т.е. "скопипастить" наследование - некрасиво, требует приведения типов, но сработает если возможно выделить это "общее" достаточное для выполнения процедуры. В данном случае общего только Rect: zglTRect и OnClick: TOnClick; этого хватит? OnClick придется перекинуть вторым параметром

з.ы.
Вам не кажется что вы пытаетесь натянуть ООП принципы на не ООП данные?
Вообще делать ГУЙ не используя ООП - ненужная морока. и классы тут подойдут лучше обжектов, т.к. скорость и минимальность неважна
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Процедуры

Сообщение Mirage » 15.10.2013 19:06:11

Если передается все равно указатель, то вариант с "абстрактной" записью с общими параметрами сработает и без приведения типов.
Однако, как раз для таких случаев и придумали дженерики.
Mirage
энтузиаст
 
Сообщения: 881
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Процедуры

Сообщение SAK » 16.10.2013 10:50:37

Код: Выделить всё
TRectButton = object
    Rect: zglTRect;
    OnClick: TOnClick;
    procedure CheckB(Down: boolean = False);
  end;

PRectTextButton = ^TRectTextButton;
  TRectTextButton = object (TRectButton)
    Alpha: byte;
    Color: longword;
    Text: UTF8String;
    TextScale: single;
    TextColor: longword;
  end;

  PRectImgButton = ^TRectImgButton;
  TRectImgButton = object (TRectButton)
    Img: zglPTexture;
  end;

procedure TRectButton.CheckB(Down: boolean = False);
begin
   // ...................
end;

По способу выделения памяти объекты аналогичны записям, но при этом обладают возможностью наследования.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Процедуры

Сообщение trexxet » 17.10.2013 13:37:13

Спасибо, переведу все на обжекты.
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru
cron