Перегрузка функции
При определении функций в программах необходимо указывать тип возвращаемого функцией значения, а также количество параметров и тип каждого из них. Если на языке С была написана функция с именем add_values, которая работала с двумя целыми значениями, а в программе было необходимо использовать подобную функцию для передачи трех целых значений, то тогда следовало бы создать функцию с другим именем. Например, add_two_valuesи add_three_values. Аналогично если необходимо использовать подобную функцию для работы со значениями типа float, то нужна еще одна функция с еще одним именем. Чтобы избежать дублирования функции, C++ позволяет определять несколько функций с одним и тем же именем. В процессе компиляции C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно требуемую функцию. Предоставление компилятору выбора среди нескольких функций называется перегрузкой.
Перегрузка функций – это создание нескольких функций с одним именем, но с разными параметрами. Под разными параметрами понимают, что должно быть разным количество аргументов функции и/или их тип. То есть перегрузка функций позволяет определять несколько функций с одним и тем же именем и типом возвращаемого значения.
Например, следующая программа перегружает функцию с именем add_values. Первое определение функции складывает два значения типа int. Второе определение функции складывает три значения типа int. В процессе компиляции C++ корректно определяет функцию, которую необходимо использовать:
#include <iostream.h>
int add_values(int a,int b) {
return(a + b);
}
int add_values (int a, int b, int c) {
return(a + b + c);
}
void main(void) {
cout << "200+801=" << add_values(200,801) << "\n";
cout << "100+201+700=" << add_values(100,201,700) << "\n";
}
Таким образом, программа определяет две функции с именами add_values. Первая функция складывает два значения, в то время как вторая складывает три значения одного типа int. Компилятор языка С++ определяет, какую функцию следует использовать, основываясь на предлагаемых программой параметрах.
Использование перегрузки функции
Одним из наиболее общих случаев использования перегрузки является применение функции для получения определенного результата, исходя из различных параметров. Например, предположим, что в программе есть функция с именем day_of_week, которая возвращает текущий день недели (0 для воскресенья, 1 для понедельника, ... , 6 для субботы). Программа могла бы перегрузить эту функцию таким образом, чтобы она верно возвращала день недели, если ей передан юлианский день в качестве параметра, или если ей переданы день, месяц и год:
int day_of_week(int julian_day) {
// операторы
}
int day_of_week(int month, int day, int year) {
// операторы
}
При использовании перегруженных функций часто допускается ряд ошибок. Например, если функции отличаются только типом возвращаемого значения, но не типами аргументов, такие функции не могут иметь одинаковое имя. Также недопустим следующий вариант перегрузки:
int имя_функции(int имя_аргумента);
int имя_функции(int имя_аргумента);
/*недопустимая перегрузка имени: аргументы имеют одинаковое количество и одинаковый тип*/
Преимущества перегрузки функции:
· перегрузка функций улучшает удобочитаемость программ;
· перегрузка функций C++ позволяет программам определять несколько функций с одним и тем же именем;
· перегруженные функции возвращают значения одинакового типа, но могут отличаться количеством и типом параметров;
· перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции, но тогда они должны знать, какая комбинация параметров соответствует какой функции.
Пример 1.
/*Перегруженные функции имеют одинаковые имена, но разные списки параметров и возвращаемые значения*/
#include<iostream.h>
int average(int first_number, int second_number,
int third_number);
int average(int first_number, int second_number);
void main() { // главная функция
int number_A = 5, number_B = 3, number_C = 10;
cout << "Целочисленное среднее чисел " << number_A << " и ";
cout << number_B << " равно ";
cout << average(number_A, number_B) << ".\n\n";
cout << "Целочисленное среднее чисел " << number_A << ", ";
cout << number_B << " и " << number_C << " равно ";
cout << average(number_A, number_B, number_C) << ".\n";
} // конец главной функции
/*функция для вычисления целочисленного среднего значения 3-х целых чисел*/
int average(int first_number, int second_number,
int third_number ) {
return((first_number + second_number + third_number)/3);
} // конец функции
/*функция для вычисления целочисленного среднего значения 2-х целых чисел*/
int average( int first_number, int second_number ) {
return((first_number + second_number)/2);
} // конец функции
Пример 2.
/*Перегруженные функции имеют одинаковые имена и типы возвращаемых значений, но разные типы параметров*/
#include<stdio.h>
float average(int first_number, int second_number,
int third_number );
float average(float first_number, float second_number,
float third_number);
void main() {
int A = 5, B = 3, C = 10;
float A1 = 5.1, B1 = 3.4, C1 = 10.5;
printf("Среднее значение 3-х целых чисел = %f\n",
average(A,B,C)/3.0);
printf("Среднее значение 3-х вещественных чисел = %f\n",
average(A1,B1,C1)/3.0);
}
/*функция для вычисления среднего значения 3-х целых чисел*/
float average(int first_number, int second_number,
int third_number ) {
return ((first_number + second_number + third_number));
}
/*функция для вычисления среднего значения 3-х вещественных чисел*/
float average(float first_number, float second_number,
float third_number) {
return ((first_number + second_number + third_number));
}
Задания
1.Составьте программу для решения задачи. Определите значение
,
где max(x, у)есть максимальное из чисел x, у. Разработайте функции нахождения максимального из двух целых и вещественных чисел.
2.Составьте программу для решения задачи. Найдите периметр треугольника, заданного координатами своих вершин (считать, что треугольник существует). Разработайте функции нахождения расстояния между двумя точками, заданными своими координатами. Предусмотрите только случаи двумерного и трехмерного пространств.
3.Составьте программу для решения задачи. Выясните, что больше: среднее арифметическое или среднее геометрическое трех положительных чисел. Разработайте перегруженные функции нахождения среднего арифметического и среднего геометрического трех целых и вещественных чисел.
Домашние задания
1.Наберите коды программ из Примеров 1 и 2. Выполните компиляцию и запуск программ.
2.Составьте программу для решения задачи. Даны координаты трех точек: A, B, C. Составьте программу нахождения углов треугольника ABC, если он существует. В противном случае выведите соответствующий комментарий. Для решения задачи разработайте функции только для случаев двумерного и трехмерного пространств.
3.Составьте программу, которая в зависимости от входных данных переводит часы и минуты в минуты или минуты – в часы и минуты. Используйте перегруженные функции. Например, при вводе 134 мин будет выдано значение 2 час 14 мин, а при вводе 2 час 14 мин – значение 134 мин.
Дата добавления: 2015-02-16; просмотров: 1370;