C для початківців

C ++ для початківців

2.7. Використання простору імен

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

Ключове слово namespace задає простір імен, що визначає видимість нашого класу і назване в даному випадку Cplusplus_Primer_3E. Припустимо, що у нас є класи від інших розробників, поміщені в інші простори імен:

За замовчуванням у програмі видно об'єкти, оголошені без явної вказівки простору імен; вони відносяться до глобального простору імен. Для того щоб звернутися до об'єкта з іншого простору, потрібно використовувати його кваліфіковане ім'я, яке складається з ідентифікатора простору імен і ідентифікатора об'єкта, розділених оператором дозволу області видимості (: :). Ось як виглядають звернення до об'єктів наведених вище прикладів:

Для зручності використання можна призначати псевдоніми просторів імен. Ім'я користувача вибирають коротким і легким для запам'ятовування. наприклад:

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

Звичайно, щоб це стало можливим, необхідно точний збіг інтерфейсів класів і функцій, оголошених в цих просторах імен. Уявімо, що клас Array з Disney_Feature_Animation не має конструктора з одним параметром - розміром. Тоді наступний код викличе помилку:

Ще більш зручним є спосіб використання простої, некваліфікованої імені для звернення до об'єктів, визначених у деякому просторі імен. Для цього існує директива using:
#include "IBM_Canada_Laboratory.h"

Простір імен IBM_Canada_Laboratory стає видимим в програмі. Можна зробити видимим не всі простір, а окремі імена всередині нього (селективна директива using):

Як ми вже згадували, всі компоненти стандартної бібліотеки С ++ оголошені всередині простору імен std. Тому простого включення заголовки недостатньо, щоб безпосередньо користуватися стандартними функціями і класами:

Необхідно використовувати директиву using:

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

Вправа 2.21

Дано простір імен

і текст програми:

Схожі статті