Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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 ()

{

CounterNameSpace::upperbound = 100;

CounterNameSpace::lowerbound = 0;

 

CounterNameSpace::counter A_ob(10);

CounterNameSpace::counter B_ob(20);

int izm;

 

cout << "Розрахунок у зворотному порядку для об'єкта A_ob" << "\n";

do {

izm = A_ob.run();

cout << izm << " ";

} while (izm > CounterNameSpace::lowerbound);

cout << endl;

 

cout << "Розрахунок у зворотному порядку для об'єкта B_ob" << "\n";

do {

izm = B_ob.run();

cout << izm << " ";

} while (izm > CounterNameSpace::lowerbound);

cout << endl;

 

B_ob.reset(100);

CounterNameSpace::lowerbound = 80;

 

cout << "Розрахунок у зворотному порядку для об'єкта B_ob" << "\n";

do {

izm = B_ob.run();

cout << izm << " ";

} while (izm > CounterNameSpace::lowerbound);

cout << endl;

 

getch (); return 0;

}

Звернемо Вашу увагу на те, що під час створення об'єкта класу counter і при зверненні до змінних upperbound і lowerbound використовують ім'я простору імен CounterNameSpace. Але після створення об'єкта типу counter вже немає потреби у повній кваліфікації його самого або його членів. Оскільки простір імен однозначно визначено, то функцію run() об'єкта A_ob можна викликати безпосередньо, тобто без вказання (як префікс) простору імен (A_ob.run()).

Програма може містити декілька оголошень просторів імен з однаковими іменами. Це означає, що простір імен можна поділити на декілька файлів або на декілька частин у рамках одного файлу. Зробити це можна так:

namespace NS {

int izm;

}

 

//....

namespace NS {

int jzm;

}

У цьому записі простір імен NS розділено на дві частини. Проте вміст кожної частини належить до одного і того ж простору імен NS.

Будь-який простір імен повинен бути оголошений поза всіма іншими областями видимості. Це означає, що не можна оголошувати простори імен, які локалізовані, наприклад, у межах функції. При цьому один простір імен може бути вкладено в інший.

21.1.2. Застосування настанови using

Якщо програма містить багато посилань на члени певного простору імен, то неважко уявити, що потреба вказувати ім'я цього простору імен під час кожного зверненні до них, дуже скоро набридне Вам. Цю проблему дає змогу| вирішити настанова using, яка застосовується у таких двох форматах:

using namespace ім'я;

using name:: член;

Настанова using робить заданий простір імен "видимим", тобто діючим.

У першій формі елемент ім'я задає назву простору імен, до якого Ви зможете отримати доступ. Всі члени, визначені усередині заданого простору імен, потрапляють в "поле видимості", тобто стають частиною поточного простору імен і їх можна потім використовувати без кваліфікації (уточнення простору імен). У другий формі робиться "видимим" тільки вказаний член простору імен. Наприклад, вважаючи, що простір імен CounterNameSpace визначено (як це показано вище), то наступні настанови using і присвоєння будуть цілком законними:

using CounterNameSpace::lowerbound; // Видимим став тільки

// член lowerbound.

lowerbound = 10; // Все гаразд, оскільки член lowerbound знаходиться

// в області видимості.

using namespace CounterNameSpace; // Всі члени видимі.

upperbound = 100; // Все гаразд, оскільки всі члени видимі.

Використання настанови using продемонстровано у наведеному нижче коді програми (яка є новим варіантом лічильника з попереднього розділу).

Код програми 21.2. Демонстрація механізму використання настанови using для виконання розрахунку у зворотному порядку

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

 




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.