Справочные данные по языку C++_____________________________631

или

char S[128] = "Значение =";

LabelS-Caption ,= ToS(S,true);

В первом случае будет вызвана функция с целым аргументом, во втором — с
аргументом типа double, в третьем— с булевым аргументом. Вы видите, что
перегрузив соответствующие функции вы существенно облегчили свою жизнь,
избавившись от необходимости думать о типе параметра.

Приведем еще один пример, в котором перегруженные функции различаются
количеством параметров. Ниже описана перегрузка функции, названной Area и
вычисляющей площадь круга по его радиусу R, если задан один параметр, и пло-
щадь прямоугольника по его сторонам а и Ь, если задано два параметра:

double Area(double R) ( return 6.26318 * R * R; )
double Area(double a, double b) ( return a * b; }

Тогда операторы вида

51 = Area(l) ;

52 = Area(1,2) ;

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

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

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

Предупреждение

Функция с пропущенными аргументами по умолчанию может оказаться вызванной анало-
гично другой перегруженной функции; это синтаксическая ошибка.

Рассмотренный аппарат перегрузки функций — только один из возможных
способов решения поставленной задачи, правда, универсальный, позволяющий ра-
ботать и с разными типами параметров, и с разным числом параметров. В следую-
щем разделе рассмотрен еще один механизм — шаблоны, позволяющий решать
аналогичные задачи, правда, для более узких классов функций.

11.5.8 Шаблоны функций

Перегруженные функции обычно используются для выполнения сходных опе-
раций над различными типами данных. Если операции идентичны для каждого
типа, это можно выполнить более компактно и удобно, используя шаблоны функ-
ций. Вам достаточно написать одно единственное определение шаблона функции.
Основываясь на типах аргументов, указанных в вызовах этой функции, Си++ ав-
томатически генерирует разные функции для соответствующей обработки каждого
типа. Таким образом, определение единственного шаблона определяет целое се-
мейство решений.