Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

96 Глава 2

Вы также можете вставить директиву using и для пространства имен std, так что вам не придется квалифицировать имена из стандартной библиотеки, однако это от- меняет саму идею пространств имен. Вообще говоря, если вы применяете простран- ства имен в своей программе, то вы не должны добавлять директивы using по всей программе, также вы можете не беспокоиться о них с самого начала. Но, отметив это, мы все же будем добавлять директиву using для std во всех примерах, чтобы код был менее громоздким и легче читался. Когда вы начинаете изучать новый язык про- граммирования, то должны стараться обходиться без усложнения кода, независимо от того, насколько это применяется на практике.

Множественные пространства имен

Реальные программы, с которыми вам придется столкнуться, скорее всего, будут включать в себя множество пространств имен. Вы можете иметь множество объявле- ний пространств с одним и тем же именем, при этом содержимое всех одноименных блоков пространств имен попадает в одно и то же пространство. Например, вы може- те иметь программный файл с двумя пространствами имен:

Второе объявление пространства имен с тем же именем — это просто продолже- ние первого, поэтому вы можете обращаться к именам первого блока пространства имен из второго без необходимости квалифицировать их. Все они находятся в одном пространстве имен. Конечно, обычно вы не будете намеренно организовывать ис- ходный файл подобным образом, но такое может случиться естественным образом с заголовочными файлами, которые вы включаете в свою программу. Например, у вас может быть нечто вроде:

#include <iostream> // Содержимое - в пространстве имен std

#include "myheader.h" // Содержимое - в пространстве имен myStuff

#include <string> // Содержимое - в прос транстве имен std

//и так далее. . .

Здесь iostream и string — заголовочные файлы стандартной библиотеки ISO/ ANSI С++, a myheader. h — заголовочный файл, содержащий ваш программный код. То есть вы имеете ситуацию с пространствами имен, которая в точности повторяет предыдущий пример.

Все это должно дать вам представление о том, как работают пространства имен. Можно еще очень много сказать о пространствах имен, но того, что я показал здесь, достаточно, чтобы вы ухватили суть и были готовы без проблем узнать больше при необходимости.

Обратите внимание, что две формы директивы iinclude в предыдущем фрагменте кода заставляют компилятор искать включаемые файлы разными способами. Когда вы специ- фицируете включаемый файл между угловыми скобками, то тем самым сообщаете компиля- тору, что он должен искать его в пути, указанном опцией компилятора /I, а не найдя там, обратиться к переменной окружения INCLUDE. Эти пути указывают на библиотечные фай- лы С++, поэтому такая форма зарезервирована для библиотечных заголовков. Переменная окружения INCLUDE указывает на папку, содержащую библиотечные заголовки, а опция /1 позволяет специфицировать дополнительные каталоги, содержащие библиотечные за- головки. Когда же имя файла указано между двойных кавычек, компилятор ищет папку, где находится файл, в котором встретилась данная директива iinclude. Если там файл не найден, поиск продолжается в библиотечных каталогах.

Программирование на C++/CLI

C++/CLI предлагает множество расширений и дополнительных возможностей вдобавок к тем, которые рассматривались до сих пор в этой главе. Прежде чем по- грузиться в детали, я представлю краткий перечень этих дополнительных возможно- стей. Итак, ниже перечислены дополнительные возможности C++/CLI.

  • Все фундаментальные типы данных ISO/ANSI, о которых я говорил ранее, мо- гут быть использованы в программах C++/CLI, но здесь они имеют некоторые дополнительные свойства в определенных контекстах, которые будут раскры- ты позже.

  • C++/CLI предоставляет собственный механизм клавиатурного ввода и вывода в командную строку консольных программ.

  • C++/CLI предоставляет операцию saf ecast, которая гарантирует, что опера- ция приведения приведет к генерации проверяющего кода.

  • C++/CLI предоставляет альтернативную возможность перечисления на основе классов и обеспечивает большую гибкость, чем объявление enum из ISO/ANSI С++, которое вы видели ранее.

Вы узнаете больше о ссылочных типах классов CLR в начале главы 4, но поскольку я уже представил глобальные переменные родного С++, то здесь отмечу, что перемен- ные ссылочных типов классов CLR не могут быть глобальными.

Я бы хотел начать с обзора фундаментальных типов данных C++/CLI.