Единственный аспект применения шаблонов, который мы уви­дим в наших программах,- это обозначение фактического типа с помощью конструкции наподобие Pair<double>.

Пространства имен

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

// namespac.cpp:   Концепция пространства имен, tinclude <iostream.h>

namespace A {   int  i  =  10; }

namespace В {   int  i  =  20; }

void fA()

{ using namespace A;

cout << "In fA:   " <<

A::i << " " << B::i << " " << i « endl; }

void fB()

{ using namespace B;

cout << "In fB:   " <<

A::i << " " « B::i << " " « i « endl; }

int main()

{  fA(); fB();

cout << "In main: " << A::i << " " << B::i << endl;

// cout << i << endl; Здесь это недопустимо.

using A::i;

cout << i << endl; //А это разрешено.

return 0; }

Эта программа на выходе даст:

In fA:  10 20 10 In fB:  10 20 20 In main: 10 20 10

Благодаря идентификаторам А и В мы впоследствии можем ссылаться на эти пространства имен. Для пространства имен А можем написать либо что-нибудь вроде

А::   ...

либо одно из выражений:

using namespace A; using A::i;

Только после использования одного из двух последних выражений неква­лифицированный идентификатор i будет относиться к переменной i (со значением 10), определенной в пространстве имен А. Результат работы программы наглядно демонстрирует это.

Тип bool: синоним для int или встроенный тип?

Тип bool и два его возможных значения, true и false, определены в файлах заголовка первоначальной версии STL с помощью приема, который часто можно встретить в программах на С:

#define bool   int #define true 1 #define  false 0

Однако в соответствии с проектом стандарта C++ bool является встроен­ным типом, что подразумевает: следующая программа, вообще не исполь­зующая файлы заголовков, должна компилироваться без ошибок:


<< назад вперед >>