Главная » Free Pascal » Переопределение функций Free Pascal

0

Одной из принципиально новых особенностей, характерных для объектно- ориентированного подхода, является возможность объявления в программе не- скольких функций или процедур с одинаковыми именами. К ним предъявляется единственное требование — списки их формальных параметров должны отличать- ся друг от друга. Это отличие может касаться как количества параметров, так и их типов. По этим критериям компилятор сможет, проанализировав каждое обраще- ние, выбрать требуемую подпрограмму.

Представим себе, что в библиотеке RTL отсутствует процедура inc, и нам пред- ложили написать свой вариант. Так как эта процедура должна обслуживать до- вольно большое количество целочисленных типов, то очевидно, что единственной процедурой обойтись нельзя. Общая канва для заголовка процедуры просматрива- ется сразу:

procedure MyInc(var v:тип; dec:LongWord=1);

Но в теле процедуры в зависимости от типа переменной v мы должны органи- зовать разные проверки на выход результата за допустимые пределы. Кроме того, придется учитывать установленный режим контроля ({$R+} или {$R–}) и корректи- ровать результат в случае нарушения границ. В результате у нас появится несколь- ко процедур, две из которых мы приводим в листинге 9.17.

   Листинг 9.17. Пр оце д уры  MyInc                                              

procedure MyInc(var v:byte; dec:LongInt=1); var

tmp:LongInt;

begin

tmp:=v+dec;

if (tmp >= 0) and (tmp < 256) then v:=tmp; if tmp < 0 then v:=(tmp mod 256)+256;

if tmp > 255 then v:=tmp mod 256; end;

procedure MyInc(var v:ShortInt; dec:LongInt=1); var

tmp:LongInt; begin

tmp:=v+dec;

if (tmp >= -128) and (tmp < 128) then v:=tmp; if tmp < -128 then v:=((tmp mod 128)) mod 128; if tmp > 127 then v:=(tmp mod 128);

end;

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии