Пространства имен
Существует другой новый элемент языка, который мы обязаны принять во внимание. Если программа состоит из многих файлов, мы должны принять меры во избежание конфликта имен. Концепция пространства имен может быть хорошим способом решения этой задачи. В нижеприведенной программе определены две глобальные переменные г, которые не находятся в конфликте, потому что существуют в различных пространствах имен:
// 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 является встроенным типом, что подразумевает: следующая программа, вообще не использующая файлы заголовков, должна компилироваться без ошибок:
<< назад вперед >>