- •Создание простой программы
- •Компиляция вашей программы
- •Создание второй программы
- •Изучение синтаксических ошибок
- •Что вам необходимо знать
- •Взгляд на операторы программы
- •Представление об операторе #include
- •Что такое void main(void)
- •Использование void
- •If errorlevel 0 if not errorlevel 1 goto successful if errorlevel 1 if not errorlevel 2 goto no_file if errorlevel 2 if not errorlevel 3 goto no_paper rem Далее идут другие команды
- •Представление о группирующих операторах { }
- •Использование cout для отображения вывода на экран
- •Что вы должны знать
- •Урок з. Вывод сообщений на экран
- •Использование cout для вывода чисел
- •Вывод нескольких значений одновременно
- •Использование специальных символов вывода
- •Другие специальные символы
- •Вывод восьмеричных и шестнадцатеричных значений
- •Вывод на стандартное устройство ошибок
- •Управление шириной вывода
- •Что вам необходимо знать
- •Урок 4. Программы хранят информацию в переменных
- •Объявление переменных в программах
- •Смысловые имена переменных
- •Слова, которые нельзя использовать для имен переменных
- •Присваивание значения переменной
- •Присваивание значения при объявлении
- •Использование значения переменной
- •Превышение диапазона значений переменной
- •Представление о точности
- •Использование комментариев для улучшения чтения ваших программ
- •Что вам необходимо знать
- •Урок 5. Выполнение простых операций
- •Основные математические операции
- •Увеличение значения переменной на 1
- •Представление о префиксной (до) и постфиксной (после) операциях увеличения
- •Старшинство операций
- •Следите за ошибками переполнения при арифметических операциях
- •Что вам необходимо знать
- •Урок 6. Чтение ввода с клавиатуры
- •Первое знакомство с cin
- •Следите за ошибками переполнения
- •Следите за ошибками несовпадения типов
- •Чтение символьных данных
- •Чтение слов с клавиатуры
- •Что вам необходимо знать
- •Урок 7. Программа принимает решение
- •Сравнение двух значений
- •Знакомство с оператором if
- •Представление о простых и составных операторах
- •Оператор else
- •Применение составных операторов для else
- •If (условие_истинно) оператор; else оператор;
- •If (условие_истинно)
- •Использование отступов для улучшения удобочитаемости вашей программы
- •Проверка двух или более условий
- •Обработка нескольких условий
- •Использование оператора switch
- •Что вам необходимо знать
- •Урок 8. Повторение одного или нескольких операторов
- •Повторение операторов указанное число раз
- •Изменение и увеличение цикла for
- •Взгляд на цикл while
- •Выполнение операторов по крайней мере один раз
- •Что вам необходимо знать
- •Создание и использование ваших первых функций
- •Программа может передавать информацию в функции
- •Функции могут возвращать результат вызвавшей функции
- •Функции, которые не возвращают значение
- •Использование возвращаемого функцией значения
- •Представление о прототипах функций
- •Что вам необходимо знать
- •Урок 10 изменение значений параметров
- •Почему функции обычно не могут изменить значения параметров
- •Изменение значения параметра
- •Второй пример
- •Что вам необходимо знать
- •Использование функций библиотеки этапа выполнения
- •Изучение функций библиотеки этапа выполнения
- •Что вам необходимо знать
- •Урок 12. Локальные переменные и область видимости
- •Объявление локальных переменных
- •О конфликте имен
- •Глобальные переменные
- •Если имена глобальных и локальных переменных конфликтуют
- •Представление об области видимости переменных
- •Что вам необходимо знать
- •Первое знакомство с перегрузкой функций
- •Когда необходима перегрузка
- •Что вам необходимо знать
- •Ссылка является псевдонимом
- •Использование ссылок в качестве параметров
- •Рассмотрим второй пример
- •Правила работы со ссылками
- •Чт0 вам необходимо знать
- •Урок 15. Значения параметров по умолчанию
- •Определение значений по умолчанию
- •Правила для пропуска значений параметров
- •Что вам необходимо знать
- •Урок 16. Хранение значений в массивах
- •Объявление переменной массива
- •Обращение к элементам массива
- •Использование индексной переменной
- •Инициализация массива при объявлении
- •Передача массивов в функции
- •Что вам необходимо знать
- •Урок 17. Символьные строки
- •Объявление символьных строк в программах
- •Как 'а' отличается от "а"
- •Инициализация символьной строки
- •Передача строк в функции
- •Преимущества того, что null представляет собой ascii 0
- •Использование строковых функций библиотеки этапа выполнения
- •Что вам необходимо знать
- •Урок 18. Хранение связанной информации в структурах
- •Объявление структуры
- •Использование элементов структуры
- •Структуры и функции
- •Функции, изменяющие элементы структуры
- •Что вам необходимо знать
- •Что вам необходимо знать
- •Урок 20. Указатели
- •Использование указателя на символьную строку
- •Второй пример
- •Уменьшение количества операторов
- •Использование указателей с другими типами массивов
- •О математике указателя
- •Что вам необходимо знать
- •Представление об объектах и объектно-ориентированном программировании
- •Определение методов класса вне класса
- •Второй пример
- •Что вам необходимо знать
- •Сокрытие информации
- •Использование общих и частных элементов класса
- •Использование оператора глобального разрешения для элементов класса
- •Частные элементы класса не всегда являются данными
- •Что вам необходимо знать
- •Урок 23. Конструктор и деструктор
- •Создание простого конструктора
- •Конструкторы и параметры по умолчанию
- •Перегрузка конструкторов
- •Представление о деструкторе
- •Что вам необходимо знать
- •Урок 24. Перегрузка операторов
- •Перегрузка операторов плюс и минус
- •Второй пример
- •Операторы, которые Вbl he можете перегрузить
- •Что вам необходимо знать
- •Урок 25. Статические функции и элементы данных
- •Совместное использование элемента данных
- •Использование элементов с атрибутами public static, еслиобъекты не существуют
- •Использование статических функций-элементов
- •Что вам необходимо знать
- •Урок 26. Наследование
- •Простое наследование
- •Второй пример
- •Что такое защищенные элементы
- •Разрешение конфликта имен
- •Что вам необходимо знать
- •Простой пример
- •Построение иерархии классов
- •Что вам необходимо знать
- •Определение друзей класса
- •Ограничение количества друзей
- •Что вам необходимо знать
- •Создание простого шаблона функции
- •Шаблоны, которые используют несколько типов
- •Что вам необходимо знать
- •Создание шаблона класса
- •Что вам необходимо знать
- •Использование оператора new
- •Освобождение памяти, если она больше не нужна
- •Второй пример
- •Что вам необходимо знать
- •Создание обработчика для операций со свободной памятью
- •Создание собственных операторов new Иdelete
- •Что вам необходимо знать
- •Урок 33. Дополнительные возможности cin и cout
- •Что внутри iostream.H
- •Использование cout
- •Использование символа-заполнителя
- •Управление цифрами значений с плавающей точкой
- •Вывод и ввод одного символа за один раз
- •Чтение ввода с клавиатуры по одному символу за раз
- •Чтение с клавиатуры целой строки
- •Что вам необходимо знать
- •Вывод в файловый поток
- •Чтение из входного файлового потока
- •Чтение целой строки файлового ввода
- •Определение конца файла
- •Проверка ошибок при выполнении файловых операций
- •Закрытие файла, если он больше не нужен
- •Управление открытием файла
- •Выполнение операций чтения и записи
- •Что вам необходимо знать
- •Урок 35 встроенные функции и ассемблерные коды
- •Встроенные функции
- •Использование ключевого слова inline
- •Встроенные функции и классы
- •Использование операторов языка ассемблера
- •Что вам необходимо знать
- •Доступ к argv и argc
- •Выполнение цикла, пока argv не содержит null
- •Трактовка argv как указателя
- •Использование аргументов командной строки
- •Доступ к переменным среды операционной системы
- •Что вам необходимо знать
- •Использование именованных констант
- •Использование именованных констант для упрощения изменения кода
- •Замена выражений макрокомандами
- •Чем макрокоманды отличаются от функций
- •Использование макрокоманд предоставляет большую гибкость
- •Что вам необходимо знать
- •Что такое полиморфизм
- •Создание полиморфного объекта-телефона
- •Что такое чисто виртуальные функции
- •Что вам необходимо знать
- •Использование оператора throw для генерации исключительной ситуации
- •Определение обработчика исключительной ситуации
- •Использование элементов данных исключительной ситуации
- •Обработка неожиданных исключительных ситуаций
- •Объявление генерируемых функцией исключительных ситуаций
- •Исключительные ситуации и классы
- •Что вам необходимо знать
Первое знакомство с перегрузкой функций
Перегрузка функций позволяет вашим программам определять несколько функций с одним и тем же именем и типом возвращаемого значения. Например, следующая программа перегружает функцию с именем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>
void show_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++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции.
* Перегруженные функции не обязаны возвращать значения одинакового типа по той причине, что компилятор однозначно идентифицирует функцию по ее имени и набору ее аргументов. Для компилятора функции с одинаковыми именами, но различными типами аргументов — разные функции, поэтому тип возвращаемого значения — прерогатива каждой функции. — Прим.перев.
