- •Часть 2
- •Раздел 3. Основы программирования
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.2.Структура программы
- •3.3.Имена и зарезервированные слова
- •3.4.Специальные символы
- •3.5.Константы и переменные
- •3.6.Оператор присваивания
- •Листинг 3.4. Пример множественного присваивания
- •3.7.Комментарии
- •4.Задание
- •Лабораторная работа №2 Арифметические операции и функции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Типы целых чисел
- •3.2.Типы вещественных чисел
- •3.3.Арифметические выражения
- •3.4.Функции
- •3.5.Преобразование типов
- •4.Задание
- •Лабораторная работа №3 Ввод и вывод данных
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Ввод и вывод
- •3.2.Дополнительные возможности ввода/вывода
- •3.3.Форматированный ввод/вывод
- •4.Задание
- •Лабораторная работа №4 Логические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Условный оператор
- •3.2.Условная операция
- •3.3.Оператор выбора
- •3.4.Составной оператор
- •3.5.Сложные условия
- •3.6.Тип bool(логический)
- •3.7.Особенности работы условного оператора
- •4.Задание
- •Лабораторная работа №5 Циклические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Оператор цикла while (цикл с предусловием)
- •3.2.Оператор цикла do (цикл с постусловием)
- •3.3.Оператор цикла for (счетный цикл)
- •3.4.Вложенные циклы
- •3.5.Операторы прерывания цикла
- •4.Задание
- •Лабораторная работа №6 Указатели и массивы
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Указатели
- •3.2.Константные указатели и указатели-константы
- •3.3.Операции над указателями
- •3.4.Массивы
- •3.5.Одномерные массивы
- •3.6.Указатели на массивы
- •3.7.Инициализация массивов
- •3.8.Операция sizeof
- •3.9.Определение новых типов
- •3.10.Многомерные массивы
- •4.Задание
- •Лабораторная работа №7 Функции и процедуры
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Описание функций
- •3.2.Процедуры
- •3.3.Параметр-ссылка
- •3.4.Область видимости переменных
- •4.Задание
- •Лабораторная работа №8 Перегрузка функций
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Полиморфизм
- •3.2.Перегрузка функций
- •3.3.Особенности перегрузки функций
- •3.4.Использование параметров по умолчанию
- •4.Задание
- •Лабораторная работа №9 Перечисления
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •4.Задание
- •Лабораторная работа №10 Строки символов
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Данные типа char
- •3.2.Строковый тип string
- •4.Задание
3.3.Особенности перегрузки функций
Для большего понимания удобства использования перегрузки рассмотрим еще один практический пример (Листинг 3.60):
Листинг 3.60. Перегрузка функции по типу параметров
Этот пример показывает, как перегрузка функций может обеспечить для функции более понятный интерфейс (Листинг 5.48). Даты очень естественно представлять либо в виде строки, либо в виде трех целых чисел, содержащих месяц, день и год. Наличие перегрузки позволяет не заботиться о выборе подходящей версии функции, а использовать одну и ту же функцию, но с разными параметрами - в соответствии с ситуацией.
До сих пор рассматривались перегружаемые функции, отличающиеся типом своих аргументов. Однако перегружаемые функции могут также отличаться и чистом аргументов, как показано в этом примере (Листинг 3.49):
Листинг 3.49. Перегрузка функции по числу параметров
Важно понимать, что тип возвращаемого значения сам по себе еще не является достаточным отличием для перегрузки функции. Если две функции отличаются только типом возвращаемых данных, компилятор не всегда сможет выбрать нужную. Например, следующий фрагмент неправилен, поскольку внутренне противоречив (Листинг 3.61):
Листинг 3.61. Неправильная перегрузка функций
Как видно из приведенного выше примера (Листинг 3.50), у компилятора нет возможности выяснить, какую версию функция f1() вызывать.
3.4.Использование параметров по умолчанию
Эта возможность C++ связана с перегрузкой функций. Она называется параметр по умолчанию и позволяет Вам, если при вызове функции соответствующий параметр не задан, дать ему значение по умолчанию.
Чтобы передать параметр по умолчанию, просто поставьте за параметром знак равенства и то значение, которое Вы хотите передать. Тогда, если при вызове функции соответствующий параметр не задан, то по умолчанию функции будет передано заданное вами значение. Например, в этой функции двум параметрам по умолчанию присваивается значение 0:
Обратите внимание, что синтаксис напоминает инициализацию переменных. Теперь эту функцию можно вызвать тремя различными способами:
с двумя заданными параметрами;
только с первым заданным параметром. В этом случае b по умолчанию станет равным нулю;
• вызываться без всяких параметров, при этом а и b по умолчанию станут равными нулю.
Таким образом, все следующие вызовы f() правильны (Листинг 3.62 ):
Листинг 3.62. Вызовы функции, использующей параметры по умолчанию
Из этого примера должно быть ясно, что невозможно передать по умолчанию значение а и задать b.
Когда создаются функции, имеющие один или более передаваемых по умолчанию аргументов, эти параметры должны задаваться только один раз, либо в определении функции, либо в ее прототипе, но не в обоих сразу.
Как Вы, вероятно, догадались, все параметры по умолчанию должны находиться правее параметров, передаваемых обычным путем. Даже больше, после того как Вы начали задавать параметры по умолчанию, уже нельзя задавать параметры, которые по умолчанию не передаются.
Еще несколько слов о параметрах по умолчанию: они должны быть константами или глобальными переменными. Они не могут быть локальными переменными или другими параметрами.
