Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Перегрузка функции - это использование одинакового имени для функций, выполняющих похожие действия, но с разными типами данных и объявленных в одной области действия.
Классическим примером перегрузки функций является наличие нескольких конструкторов в классе.
Перегруженные функции имеют следующие свойства:
- должны отличаться сигнатурой, т.е. числом, порядком следования и типами параметров; тип возвращаемого значения и имена параметров не учитываются; пример перегруженной функции vvod:
void vvod(int m, int n) {...}
void vvod(float m, float n) {...}
void vvod(float m) {...}
void vvod(char ch) {...}
- должны быть объявлены в одной области действия, например, класса, файла; элементы-функции разных классов не являются перегруженными, так как имеют свою область действия класс.
- выбор соответствующей функции производится компилятором в результате сравнения оператора вызова с сигнатурами функций согласно алгоритму выбора.
Алгоритм выбора функции состоит из следующих этапов:
- проверка на точное соответствие;
- проверка на стандартные преобразования типов;
- проверка на преобразования, определяемые классом (см. выше - в примерах на преобразование из float в complex и из complex в float эти типы становятся совместимыми).
Примеры:
int x, y; vvod(x, y); //вызов vvod(int, int), точное соответствие
int x; vvod(x); //вызов vvod(float), стандартное преобразование
vvod((char)1); //вызов vvod(char), преобразование пользователя
Связывание оператора вызова функции с определением необходимой функции производится на этапе компиляции. Это, так называемое, раннее связывание, позволяющее получать наиболее оптимальный код.
В связанных классах (базовом и производном) наличие функций с одинаковой сигнатурой приводит к неоднозначности доступа. Программист должен сам заложить раннее связывание, т.е. для вызова необходимой функции использовать имя соответствующего класса с операцией разрешения видимости (::).
В C++ имеются средства, позволяющие переложить связывание вызова таких функций с определениями функций с программиста на саму программу во время ее выполнения. Это механизм виртуальных функций или позднее связывание.
Дата публикования: 2014-11-26; Прочитано: 238 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!