- •1. Основные типы данных, объявление пользовательских типов данных typedef
- •Int (целочисленный тип)
- •2. Основные директивы препроцессора. Макросы
- •3. Указатели и динамическая память
- •4. Понятие функций. Механизм вызова функций и передача параметров
- •5. Передача и возврат параметров по значению и по указателю
- •6. Ссылки и ссылочные параметры
- •7. Перегрузка функций
- •8. Использование спецификатора const с указателями.
- •9. Понятие идентификатора. Пространства имен. Ключевое слово namespace
- •10. Анонимные пространства имен. Ключевое слово using.
- •11. Понятие структур. Оператор доступа к полям структуры по указателю.
- •12 . Понятие класса и объекта.
- •13. Время жизни переменных и объектов.
- •14. Область действия класса. Управление доступом к членам класса. Отделение интерфейса от реализации
- •15 . Понятие конструктора. Использование конструктора с аргументами по умолчанию. Конструктор по умолчанию.
- •16. Понятие деструктора. Когда вызываются конструкторы и деструкторы.
- •17. Константные объекты и функции-члены.
- •18. Дружественные функции и дружественные классы.
- •19. Использование указателя this.
- •20. Использование операции new и delete.
- •21. Статические члены класса.
- •25.Функции-операции как члены класса и как дружественные функции.
- •26.Перегрузка операции присваивания. Условия вызова оператора присваивания и конструктора копирования.
- •27. Понятие наследования. Механизм ограничения доступа при наследовании.
- •28.Приведение типа указателя базового класса к указателю производного класса и наоборот.
- •29.Переопределение членов базового класса в производном классе.
- •30. Конструкторы и деструкторы в производных классах
- •32. Неявный вызов конструкторов объектов
- •33. Понятие виртуальной функции
- •34. Понятие полиморфизма (примеры)
- •35. Абстрактные и конкретные базовые классы
- •36. Статическое и динамическое связывание
- •37. Виртуальные деструкторы
- •38. Шаблоны. Шаблонная функция
- •39. Шаблоны классов. Применение. Параметры шаблона типа typename
- •40. Шаблоны классов и наследование.
- •41. Шаблоны. Инстанцирование шаблонов и спецификация шаблонов
- •42. Понятие исключения. Когда должна использоваться обработка исключений.
- •43. Генерация исключений. Повторная генерация исключений
- •44. Перехватывание исключений
- •45. Спецификация исключений. Обработка неожидаемых исключений.
- •46. «Раскручивание» стека. Иерархия исключений стандартной библиотеки
- •47. Конструкторы, деструкторы и обработка исключений. Исключения и наследование.
- •48. Обработка неуспешного выполнения new
- •49. Стандартная библиотека шаблонов (stl). Основные типы контейнеров
- •50. Стандартная библиотека шаблонов (stl). Алгоритмы, методы, итераторы
- •51. Последовательные контейнеры: vector, list, deque. Основные методы и алгоритмы
- •52. Ассоциативные контейнеры: set, multiset, map, multimap. Основные методы и алгоритмы.
- •53. Операторы приведения типов static_cast, reinterpret_cast
- •54. Информация о типе времени выполнения (rtti). Использование функции typeid(). Оператор dynamic cast
- •55. Ключевое слово ехрlicit.Ключевое слово mutable
- •56. Классы-контейнеры и классы-итераторы
- •57. Понятие ооп. Парадигмы ооп (инкапсуляция, наследование, полиморфизм)
- •58. Основные составляющие объектного подхода: абстрагирование, инкапсуляция, модульность
- •59. Природа объекта. Состояние, поведение, идентичность объекта
- •60. Отношения между объектами. Связи. Агрегация
7. Перегрузка функций
При определении функций в своих программах вы должны указать тип возвращаемого функцией значения, а также количество параметров и тип каждого из них. C++ позволяет вам определять несколько функций с одним и тем же именем. В процессе компиляции C++ принимает во внимание количество аргументов, используемых каждой функцией, и затем вызывает именно требуемую функцию. Предоставление компилятору выбора среди нескольких функций называется перегрузкой. В этом уроке вы научитесь использовать перегруженные функции. К концу данного урока вы освоите следующие основные концепции:
Перегрузка функций позволяет вам использовать одно и то же имя для нескольких функций с разными типами параметров.
Для перегрузки функций просто определите две функции с одним и тем же именем и типом возвращаемого значения, которые отличаются количеством параметров или их типом.
Перегрузка функций является особенностью языка C++, которой нет в языке С. Видно,что перегрузка функций достаточно удобна и может улучшить удобочитаемость программ.
Перегрузка функций позволяет вашим программам определять несколько функций с одним и тем же именем и типом возвращаемого значения. Например, следующая программа перегружает функцию с именем 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, в то время как вторая складывает три значения. Вы не обязаны что-либо предпринимать специально для того, чтобы предупредить компилятор о перегрузке, просто используйте ее. Компилятор разгадает, какую функцию следует использовать, основываясь на предлагаемых программой параметрах.
Одним из наиболее общих случаев использования перегрузки является применение функции для получения определенного результата, исходя из различных параметров.
Перегрузка функций улучшает удобочитаемость программ
Перегрузка функций C++ позволяет вашим программам определять несколько функций с одним и тем же именем. Перегруженные функции должны возвращать значения одинакового типа, но могут отличаться количеством и типом параметров. До появления перегрузки функций в C++ программисты языка С должны были создавать несколько функций с почти одинаковыми именами. К сожалению программисты, желающие использовать такие функции, должны были помнить, какая комбинация параметров соответствует какой функции. С другой стороны, перегрузка функций упрощает задачу программистов, требуя, чтобы они помнили только одно имя функции.
8. Использование спецификатора const с указателями.
При использовании const с указателями, действие модификатора может распространяться либо на значение указателя, либо на данные на которые указывает указатель.
Отличия
int *const p1
int const* p2
const int* p3
То, что находится справа относится к переменной. То, что слева - к типу, на который она указывает.