Четвертый BORLAND С++ и его окружение

       

Ранее связывание с помощью переопределяемых функций


Действие механизма переопределяемых функций несколько сходно с

механизмом функции переключателя switch, используемого в Паскале. Однако, если switch, в зависимости от значения, выполняет тот или иной

блок процедур, то переопределяемые функции, в зависимости от заданных

аргументов вызывают и выполняют, тот или иной код, используя одно и

то же имя функции. Дело в том, что компиляторы Турбо и Borland С++,

различают функции не только по их именам, но и по типу их аргументов.

Достичь полиморфизма через "игру" с аргументами можно: потерей

одного из аргументов (осторожно, так чтобы компилятор не спутал

отсутствие аргумента с особой "потерей" аргументов, принимаемыми "по

умолчанию", описываемыми далее), изменить тип аргумента, или использовать различное число аргументов. Например, функцию, вычисляющую

площадь прямоугольника

double sqr (double x, double y){return x*y;}

можно дополнить одноименной, но вычисляющей площадь квадрата, имеющую



отличный тип у аргумента x и меньшее число параметров:

int sqr (int x){return x*x;}

Компилятор предварительно просматривает содержащиеся в функции

типы и по отличию в типе аргумента определяет ту или иную функцию.

Переопределяемые функции

v v v

double sqr (double x, double y); int sqr(int x);

{ { ^

return x*y; return x * x;

} }

int i, k;

Проверка типов

v v

k = add(i);

Как вы видите наблюдается некоторая дополнительная работа (компилятора языка С++ по отношению к Си), при раннем связывании функций

объектов - проверка типов.

Однако нужно иметь в виду, что компилятор не отличит эти же

функции, если тип аргумента сделать одинаковым, а изменить лишь тип

возвращаемого значения, например:

double sqr (double x){return x*x;};

и

int sqr (double x){return x*x;}



Содержание раздела