Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Ответы все.docx
Скачиваний:
23
Добавлен:
01.03.2016
Размер:
71.65 Кб
Скачать

47. Директивы препроцессора, макросы и условная компиляция.

Препроцессором называется первая фаза компилятора. Инструкции препроцессора

называются директивами. Они должны начинаться с символа #, перед которым

в строке могут находиться только пробельные символы.

Директива #include <имя_файла> вставляет содержимое указанного файла в ту точку

исходного файла, где она записана. Включаемый файл также может содержать

директивы #include. Поиск файла, если не указан полный путь, ведется в стандартных

каталогах включаемых файлов. Вместо угловых скобок могут использоваться

кавычки (" ") — в этом случае поиск файла ведется в каталоге, содержащем

исходный файл, а затем уже в стандартных каталогах.

Директива #def 1 пе определяет подстановку в тексте программы. Она используется

для определения:

• символических констант:

#def1ne имя текст_подстановки

(все вхождения имени заменяются на текст подстановки);

• макросов, которые выглядят как функции, но реализуются подстановкой их

текста в текст программы:

#define имя( параметры ) текст_подстановки

• символов^ управляющих условной компиляцией. Они используются вместе с директивами

#1 fdef и #1 f ndef

48. Организация пространств имен.

Пространство имён (англ. namespace) — некоторое множество, под которым подразумевается модель, абстрактное хранилище или окружение, созданное для логической группировки уникальных идентификаторов (то есть имён). Идентификатор, определенный в пространстве имён, ассоциируется с этим пространством. Один и тот же идентификатор может быть независимо определён в нескольких пространствах. Таким образом, значение, связанное с идентификатором, определённым в одном пространстве имён, может иметь (или не иметь) такое же значение, как и такой же идентификатор, определённый в другом пространстве. Языки с поддержкой пространств имён определяют правила, указывающие, к какому пространству имён принадлежит идентификатор (то есть его определение).

49. Пространство имен для стандартной библиотеки.

Эта тема достойна отдельного длинного разговора, но я уделю ей совсем немного времени - лишь бы вы понимали, о чем идет речь, когда придется с ними столкнуться.

Пространства имен помогают избегать конфликтов имен (функций, переменных и так далее). Думаю, сама проблема очевидна, но тем не меннее поясню на простом примере. Если вы попытаетесь сравнить random() из стандартной библиотеки со своим генератором случайных чисел, то в программе на С вам придется изобретать для своего генератора другое имя.

До того, как был принят стандарт, довольно долго в С++ не было пространств имен, а стандартные файлы заголовков так же, как и в С, заканчивались суффиксом .h - например <iostream.h>.

50. Контейнерные классы.

Контейнерные классы — это классы, предназначенные для хранения данных, организованных определенным образом. Примерами контейнеров могут служить массивы, линейные списки или стеки. Для каждого типа контейнера определены методы для работы с его элементами, не зависящие от конкретного типа данных, которые хранятся в контейнере, поэтому один и тот же вид контейнера можно

использовать для хранения данных различных типов. Эта возможность реализована с помощью шаблонов классов, поэтому часть библиотеки C++, в которую входят контейнерные классы, а также алгоритмы и итераторы, о которых будет рассказано в следующих разделах, называют стандартной библиотекой шаблонов (STL — Standard Template Library). Использование контейнеров позволяет значительно повысить надежность программ,