
- •1 Вопрос: Поняття алгоритму. Властивості алгоритму. Способи описування алгоритмів
- •40 Вопрос
- •Создание простого конструктора
- •Представление о деструкторе
- •Что вам необходимо знать
- •41 Вопрос: ------
- •42 Вопрос: Урок 26. Наследование
- •Простое наследование
- •43 Вопрос 44 вопрос:
- •Дружні функції
- •46 Вопрос:
- •Первое знакомство с перегрузкой функций
- •Когда необходима перегрузка
- •Что вам необходимо знать
- •Создание простого шаблона функции
- •Шаблоны, которые используют несколько типов
- •Что вам необходимо знать
- •Шаблоны классов
- •16.1. Определение шаблона класса
- •50 Вопрос:
- •Класс cFile
- •Структуры
- •Класифікація мов програмування
- •Типы переменных. Объявление переменных. Константы. Присваивание. Арифметические операции. Инкремент и декремент.
Первое знакомство с перегрузкой функций
Перегрузка функций позволяет вашим программам определять несколько функций с одним и тем же именем и типом возвращаемого значения. Например, следующая программа перегружает функцию с именем add_values. Первое определение функции складывает два значения типа 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) << endl; cout << "100 + 201 + 700 = " << add_values(100, 201, 700) << endl; }
Как видите, программа определяет две функции с именами add_values Первая функция складывает два значения типа int, в то время как вторая складывает три значения. Вы не обязаны что-либо предпринимать специально для того, чтобы предупредить компилятор о перегрузке, просто используйте ее. Компилятор разгадает, какую функцию следует использовать, основываясь на предлагаемых программой параметрах.
Подобным образом следующая программа MSG_OVR.CPP перегружает функцию show_message. Первая функция с именем show_message выводит стандартное сообщение, параметры ей не передаются. Вторая выводит передаваемое ей сообщение, а третья выводит два сообщения:
#include <iostream.h>
voidshow_message(void)
{ cout << "Стандартное сообщение: "<<"Учимся программировать на C++" << endl; }
void show_message(char *message)
{ cout<< message << endl; }
void show_message(char *first, char *second)
{ cout<< first << endl; cout << second << endl; }
void main(void)
{ show_message(); show_message("Учимсяпрограммироватьнаязыке C++!"); show_message("B C++ нетпредрассудков!","Перегрузка - этокруто!") ; }
Когда необходима перегрузка
Одним из наиболее общих случаев использования перегрузки является применение функции для получения определенного результата, исходя из различных параметров. Например, предположим, что в вашей программе есть функция с именем day_of_week, которая возвращает текущий день недели (0 для воскресенья, 1 для понедельника, ..., 6 для субботы). Ваша программа могла бы перегрузить эту функцию таким образом, чтобы она верно возвращала день недели, если ей передан юлианский день в качестве параметра, или если ей переданы день, месяц и год:
int day_of_week(int julian_day)
{ // Операторы }
int day_of_week(int month, int day, int year)
{ // Операторы }
По мере изучения объектно-ориентированного программирования в C++, представленного в следующих уроках, вы будете использовать перегрузку функций для расширения возможностей своих программ.
Перегрузка функций улучшает удобочитаемость программ
Перегрузка функций C++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа*, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции.
* Перегруженные функции не обязаны возвращать значения одинакового типа по той причине, что компилятор однозначно идентифицирует функцию по ее имени и набору ее аргументов. Для компилятора функции с одинаковыми именами, но различными типами аргументов — разные функции, поэтому тип возвращаемого значения — прерогатива каждой функции. — Прим.перев.