// . . .
namespace NS {
int j;
}
Здесь пространство имен
Любое пространство имен должно быть объявлено вне всех остальных областей видимости. Это означает, что нельзя объявлять пространства имен, которые локализованы, например, в рамках функции. При этом одно пространство имен может быть вложено в другое.
Если программа включает множество ссылок на члены некоторого пространства имен, то нетрудно представить, что необходимость указывать имя этого пространства имен при каждом к ним обращении, очень скоро утомит вас. Эту проблему позволяет решить инструкция
using namespace имя;
using name::член;
В первой форме элемент
using CounterNameSpace::lowerbound; /* Видимым стал только член lowerbound */
lowerbound = 10; /* Все в порядке, поскольку член lowerbound находится в области видимости. */
using namespace CounterNameSpace; // Все члены видимы.
upperbound = 100; // Все в порядке, поскольку все члены видимы.
Использование инструкции
// Использование инструкции using.
#include
using namespace std;
namespace CounterNameSpace {
int upperbound;
int lowerbound;
class counter {
int count;
public:
counter (int n) {
if(n <= upperbound) count = n;
else count = upperbound;
}
void reset(int n) {
if(n <= upperbound) count = n;
}
int run() {
if(count > lowerbound) return count--;
else return lowerbound;
}
};
}
int main()
{
/* Используется только член upperbound из пространства имен CounterNameSpace. */
using CounterNameSpace::upperbound;
/* Теперь для установки значения переменной upperbound не нужно указывать пространство имен. */
upperbound = 100;
/* Но при обращении к переменной lowerbound и другим объектам по-прежнему необходимо указывать пространство имен. */
CounterNameSpace::lowerbound = 0;
CounterNameSpace::counter ob1(10);
int i;
do {
i = ob1.run();
cout << i << " ";
}while(i > CounterNameSpace::lowerbound);
cout. << endl;
/* Теперь используем все пространство имен CounterNameSpace. */
using namespace CounterNameSpace;
counter ob2(20);
do {
i = ob2.run();
cout << i << " ";
}while(i > lowerbound);
cout << endl;
ob2.reset(100);
lowerbound = 90;
do {
i = ob2.run();
cout << i << " ";
}while(i > lowerbound);
return 0;
}
Эта программа иллюстрирует еще один важный момент. Использование одного пространства имен не переопределяет другое. Если некоторое пространство имен становится