Глава 15. Перегрузка функций_________________________________369

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

• Если использование одинаковых имен функций улучшает логику программы.

• Если в зависимости от типов передаваемых аргументов используются различные алгоритмы.

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

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

*

Перегрузка конструкторов

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

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

В Borland C++ конструктором по умолчанию является также конструктор, всем аргументам которого заданы значения по умолчанию. Если посмотреть на определение класса, то все аргументы такого конструктора снабжены знаком равенства (==) и следующим за ним начальным значением.

Конструкторы с аргументами. Классы могут иметь несколько конструкторов. Мы с вами встречали конструкторы, которые принимают аргументы самых разнообразных типов и в любом количестве. Этот тип конструкторов используется тогда, когда разработчик класса полагает, что пользователю следует предоставить возможность самим определять некоторые свойства создаваемых объектов, задавая значения для членов класса.