
- •1. Указатели, ссылки, квалификатор const.
- •2. Контейнерные типы данных (vector, list, map, set).
- •3. Итераторы.
- •4. Прототип функции. Параметры функции (указатели, ссылки, массивы, по
- •5. Области видимости и пространства имен.
- •6. Перегрузка функций. Разрешение перегрузки.
- •7. Шаблоны функций, конкретизация.
- •8. Обработка исключений. За и против.
- •9. Обобщенные алгоритмы.
- •10. Классы: инкапсуляция данных, уровни доступа к членам, неявный указатель
- •11. Создание и уничтожение объектов класса. Статические члены класса. Открытые и закрытые конструкторы.
- •12. Перегруженные операторы и преобразования, определенные пользователем.
- •13. Шаблоны классов.
- •14. Открытое и закрытое наследование.
- •15. Полиморфизм.
5. Области видимости и пространства имен.
В С++ поддерживается три их типа: локальная область видимости, область видимости пространства имен и область видимости класса.
1 Локальная область – это часть исходного текста программы, содержащаяся в определении функции (или блоке внутри тела функции). Каждая составная инструкция (или блок) внутри функции также представляет собой отдельную локальную область. Такие области могут быть вложенными. Глобальная область видимости включает в себя обе локальных.
2 Область видимости объекта (переменной или функции) определяет, в каких участках программы допустимо использование имени этого объекта. Поскольку пространства с глобальной областью видимости добавляются к системе, то имеется возможность возникновения коллизии имен. Это становится особенно актуальным при использовании библиотек, разработанных различными независимыми производителями. Использование namespace позволяет разбить глобальное пространство имен с тем, чтобы решить подобную проблему. По существу, namespace определяет область видимости.
Самая внешняя часть называется глобальной областью видимости или глобальной областью видимости пространства имен. Объекты, функции, типы и шаблоны могут быть определены в глобальной области видимости. Разрешено задать пользовательские пространства имен, заключенные внутри глобальной области с помощью определения пространства имен. Каждое такое пространство является отдельной областью видимости. namespace Cplusplus {}
Глобальный объект существует на протяжении всего времени выполнения программы. Время жизни глобального объекта начинается с момента запуска программы и заканчивается с ее завершением.
3 Каждое определение класса представляет собой отдельную область видимости класса.
В общем случае имя должно обозначать одну сущность внутри одной области видимости. Перегруженные функции являются исключением из правила: можно завести несколько одноименных функций в одной области видимости, если они отличаются списком параметров.
6. Перегрузка функций. Разрешение перегрузки.
Две функции называются перегруженными, если они имеют одинаковое имя, объявлены в одной и той же области видимости, но имеют разные списки формальных параметров. Перегрузка позволяет иметь несколько одноименных функций, выполняющих схожие операции над аргументами разных типов.
В C++ двум или более функциям может быть дано одно и то же имя при условии, что их списки параметров различаются либо числом параметров, либо их типами.
Все перегруженные функции объявляются в одной и той же области видимости.
Разрешением перегрузки функции называется процесс выбора той функции из множества перегруженных, которую следует вызвать.
При разрешении перегрузки функции выполняются следующие шаги:
Выделяется множество перегруженных функций для данного вызова, а также свойства списка аргументов, переданных функции/множествово кандидатов
Выбираются те из перегруженных функций, которые могут быть вызваны с данными аргументами, с учетом их количества и типов.
Находится функция, которая лучше всего соответствует вызову.
Ранги преобразований:
точное соотношение (array->pointer, funct->pointer)
повышение типа (char, short->int; float->double)
стандартные преобразования (все преобр.типов, не относящ. к повыш. типов; преобраз. м\ж цел.числами и плвающ. запятой)
пользовательские преобразования