Всем привет! Свершилось чудо! Наконец-то руки дошли до написания статьи в раздел «Программирование». Сегодня я решил немного рассказать о перегрузке функций. Идея пришла как раз во время использования этой самой перегрузки в одной из своих программ.
Каждый программист знает, что любые имена в исходном коде программы следует задавать осмысленно. Конечно, компилятору абсолютно без разницы, какие названия вы используете. Хоть лбом в клавиатуру ударьте, набрав случайный набор букв и символов.
Но в дальнейшем читать код будет живой человек, так что использование хоть немного осмысленных имён обязательно. Именно для внесения ясности перегрузка функций и используется.
Перегрузка функций — своеобразная «фишка» языка С++, которой не было в С. В отличии от своего предшественника, С++, обращая внимание на количество значений, передаваемых в качестве аргументов, позволяет записать несколько функций с одинаковыми именами. Перегруженными называются функции и процедуры, имеющие одно и то же имя, но принимающие различные параметры. Передаваемые параметры могут отличаться как количеством, так и типом. Компилятор автоматически определит, какой из вариантов нужно вызвать в конкретной части программы.
Для чего нужна перегрузка функций?
Использование перегрузки чаще всего необходимо, когда несколько функций, выполняющих идентичные действия, должны принимать разные аргументы. Можно, конечно, каждый раз объявлять функцию с новым именем, но это усложнит понимание кода другими людьми. Да и сам программист способен запутаться в своём же коде. Таким образом, используя перегрузку, вы устраняете неясности и делаете код программы понятнее.
Рассмотрим пример. Не буду мудрить и напишу простой код для вычисления произведения двух чисел. Перегрузка функций выглядит следующим образом:
1 2 3 4 5 6 7 8 9 |
double composition(int a, int b) { return a*b; } double composition(double c, double d) { return c*d; } |
Как видите, в первом случае функция принимает параметры целочисленного типа, во втором — double.
Вызов перегруженных функций
Чтобы вызвать перегруженную функцию, достаточно просто указать передаваемые аргументы, как при вызове обычной функции. Компилятор сам выберет нужный вариант, в зависимости от типов сообщаемых значений.
Предположим, мы передаём значения 2 и 4, затем 3.3 и 2.5:
1 2 |
composition(2, 4); composition(3.3, 2.5); |
В первой строке вызывается первый вариант функции, так как 2 и 4 — значения типа int. Соответственно, во второй строке — второй вариант.
Перегрузка функций и процедур облегчает жизнь программистам, позволяя работать с одним именем функции вместо нескольких. Согласитесь, это гораздо удобнее, особенно при поддержке и сопровождении больших проектов.
Имена и обозначения процедур и функций, являющихся частью языка программирования, не могут быть использованы программистом для именования собственных подпрограмм.