Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

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; // Використання стандартного простору імен

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 A_ob (10);

int izm;

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

do {

izm = A_ob.run();

cout << izm << " ";

} while(izm > CounterNameSpace::lowerbound);

cout << endl;

// Тепер використовуємо весь простір імен CounterNameSpace.

using namespace CounterNameSpace;

counter B_ob(20);

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

do {

izm = B_ob.run();

cout << izm << " ";

} while(izm > lowerbound);

cout << endl;

B_ob.reset(100);

lowerbound = 80;

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

do {

izm = B_ob.run();

cout << izm << " ";

} while(izm > lowerbound);

cout << endl;

getch(); return 0;

}

Ця програма ілюструє ще один важливий момент: якщо певний простір імен стає "видимим", то це означає, що він просто додає свої імена до імен інших, вже діючих просторів. Тому до кінця цієї програми до глобального простору імен додалися і std, і CounterNameSpace.