namespaces c
Повний огляд просторів імен у C ++ на простих прикладах.
До цього часу в наших попередніх підручниках ми бачили все про змінні, оголошення, функції та інші подібні сутності, що використовуються в C ++.
Під час розробки додатків на C ++ можуть виникати деякі особливі ситуації, такі як імена змінних, які використовуються двічі, або функції, визначені з однаковими прототипами тощо. Коли виникають ці сценарії, компілятору стає важко вивести правильну виклик змінної або функції, що породжує неоднозначність .
=> Ознайомтесь з Ідеальним навчальним посібником для C ++ тут.
Що ви дізнаєтесь:
- Що таке простір імен?
- Визначення простору імен
- Доступ до членів простору імен
- Директива про використання
- Вкладені простори імен
- Зовнішні простори імен
- Суміжні простори імен
- Висновок
- Рекомендована література
Що таке простір імен?
Давайте подивимось нижче приклад:
#include #include int main() { int var; double var; std::cin>>var; }
Вихід:
У функції ‘int main ()’:
8:10: помилка: суперечливе оголошення 'double var'
7: 7: примітка: попередня декларація як „int var“
У наведеному вище прикладі ми визначили дві змінні з різними типами, але однаковим ідентифікатором. Отже, коли ми компілюємо цей приклад, ми отримуємо помилку, як показано у вікні виводу. Ці суперечливі декларації виникають через той самий ідентифікатор, який використовується для іменування двох змінних.
Цей тип ситуацій породжує неоднозначність у застосуванні.
C ++ представляє щось під назвою “ простори імен ”Для вирішення цієї проблеми. Простір імен у C ++ подібний до пакету, області чи бібліотеки, яка використовується для розмежування змінної або функцій з однаковими ідентифікаторами.
Простір імен може містити змінні, функції, класи або інші об'єкти і навіть інший простір імен. До кожного члена простору імен можна посилатися за допомогою простору імен. Це допомагає компілятору розрізняти різні сутності програмування, навіть якщо вони мають однакові імена.
Визначення простору імен
У C ++ ми можемо визначити простір імен за допомогою ключового слова “ простір імен ”, Як показано нижче:
namespace namespace_name{ namespace_declarations; }
Отже, якщо нам потрібно визначити простір імен «test_space», ми можемо зробити це, як показано нижче:
namespace test_space{ int var=10; }
Вищезазначена декларація визначає простір імен з назвою „test_space”. Як показано, в якості члена вона має цілочисельну змінну var.
Доступ до членів простору імен
Тепер ми визначили власний простір імен “test_space” і як отримати доступ до вмісту цього простору імен?
У програмі C ++ ми можемо отримати доступ до членів простору імен, використовуючи синтаксис:
namespace_name::namespace_member;
Таким чином, цілочисельна змінна var, оголошена у просторі імен “test_space” вище, може бути доступна наступним чином:
test_space::var;
Дивіться повний приклад нижче, щоб продемонструвати простори імен та їх використання.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Вихід:
локальний вар = 20,53
test_space :: var = 10
Ми продемонстрували все про створення та доступ до простору імен у наведеному вище прикладі програмування. Як ми бачимо, “test_space” - це простір імен, який ми визначили. У ньому визначена одна ціла змінна змінної var. Тоді в основній функції ми маємо ще одну подвійну змінну var, яка ініціалізується.
Пізніше ми відобразимо обидві ці змінні. Зверніть увагу, що хоча локальна подвійна змінна всередині основної може бути надрукована безпосередньо, щоб надрукувати змінну простору імен, ми повинні перед нею вказати ім'я простору імен.
Це також подбало про проблему зіткнень між змінними через ті самі імена, які ми обговорювали раніше.
Директива про використання
У попередній темі ми побачили, що ми можемо отримати доступ до членів простору імен за допомогою namespace_name :: namespace_member.
Якщо ми не хочемо вказувати назву простору імен скрізь у програмі, ми можемо скористатися використання Директива про включення простору імен до програми.
Це робиться наступним чином:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Вихід:
локальний вар = 20,53
test_space :: var = 10
У наведеному вище прикладі ми використали два оператори після визначення простору імен “test_space”.
Це:
using namespace std; using namespace test_space;
Перший оператор використовує декларацію для доступу до простору імен “std”, який є заздалегідь визначеним стандартним простором імен у бібліотеці C ++. Цей простір імен використовується для доступу до різних функцій, таких як cin, cout тощо.
Другий вислів використовується для включення простору імен “test_space” до програми.
У головній функції ми бачимо, що таким функціям, як cout та змінна var, не обов'язково передувати ім'я простору імен. Ми можемо безпосередньо посилатися на них. Але оскільки var має зіткнення імен з локальною змінною в основній функції, ми посилаємось на нього за допомогою оператора роздільної здатності сфери (: :), оскільки простори імен також завжди мають глобальну область дії.
Вкладені простори імен
C ++ також дозволяє мати вкладені простори імен, тобто простір імен, визначений всередині іншого простору імен.
Загальний синтаксис вкладених просторів імен такий:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Якщо нам потрібен доступ до ns2_code, тоді ми можемо отримати доступ до нього наступним чином:
ns1::ns2::ns2_code;
Продемонструємо вкладені простори імен, використовуючи наступний приклад коду.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< Вихід:
локальний вар = 20,53
перший :: var = 10
другий :: var = 20
Ми використовували вкладені простори імен у вищезазначеній програмі. Зверніть увагу, як директива using використовується для доступу до просторів імен. Недостатньо посилатися лише на внутрішній простір імен один раз. Якщо нам потрібен код із найвіддаленішого простору імен, тоді нам потрібно посилатися на нього окремо.
Ми можемо використовувати іншу назву для просторів імен, відомих як “псевдонім”. Це особливо корисно при використанні вкладених просторів імен, і ступінь вкладеності високий.
Ми можемо продемонструвати псевдонім для простору імен, змінивши наведений вище Приклад.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Вихід:
локальний вар = 20,53
перший :: var = 10
другий :: var = 20
Зверніть увагу на вкладений псевдонім, визначений для простору імен first :: second. Після того, як псевдонім визначений, ми можемо звернутися до простору імен, використовуючи ім’я псевдоніма.
Зовнішні простори імен
Іноді, коли у нас занадто багато просторів імен для використання в нашій програмі, ми можемо захотіти розмістити всі простори імен в окремому файлі. Це легко зробити. Коли простори імен знаходяться в окремому файлі, ми просто включаємо цей файл у нашу програму, а потім безпосередньо використовуємо простори імен та їх вміст у нашій програмі.
Наприклад, якщо у нас є файл з іменем ns.h, який містить наступний простір імен.
//ns.h namespace first{ int var = 25; }
Тепер у нашій програмі ми можемо використовувати простір імен «перший» таким чином:
#include #include “ns.h” using namespace std; int main() { cout<Отож, коли ми включимо файл, що містить простори імен, до нашої програми, ми можемо використовувати простори імен так, ніби він був оголошений глобально в тій самій програмі.
Суміжні простори імен
С ++ також дозволяє визначити щось, що називається суміжним простором імен. Суміжні простори імен - це простори імен, які визначаються неодноразово, маючи однакову назву. Насправді це не окремі простори імен, а розширення того самого простору імен.
Суміжні простори імен видно з наведеного нижче Прикладу.
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Вихід:
локальний вар = 20,53
перший :: var = 10
другий :: var = 20
Зверніть увагу у наведеному вище прикладі, що ми двічі визначали один і той самий простір імен. У першому визначенні ми маємо змінну з іменем var. У той час як у другій декларації ми маємо інший простір імен.
У головній функції ми отримали доступ до членів зовнішнього, а також внутрішнього простору імен і зауважимо, що до членів легко отримати доступ.
Це приклад суміжних просторів імен, які іноді також відомі як “розривні простори імен”. Їх визначення виглядають окремо, але насправді вони є суцільними просторами імен.
Висновок
На цьому ми підійшли до кінця цього підручника з просторів імен у C ++. Простори імен одним способом, що дозволяє нам відокремлювати наш код у різних просторах або регіонах, щоб ми мали чіткість у його читанні, а також у використанні його членів.
Як відкрити файл XML в
У наступних підручниках ми дізнаємося більше про різні основні теми C ++, такі як обробка винятків, введення / виведення файлів тощо.
=> Перегляньте тут, щоб побачити A-Z з навчальних посібників з C ++ тут.
Рекомендована література
- Найкращий БЕЗКОШТОВНИЙ підручник з C #: Остаточний посібник для C # для початківців
- Тестування навантаження за допомогою підручників HP LoadRunner
- Бібліотечні функції в C ++
- 70+ НАЙКРАЩИХ підручників для C ++ для вивчення програмування на C ++ БЕЗКОШТОВНО
- Об'єктно-орієнтоване програмування на C ++
- Списки ініціалізаторів на C ++
- Ітератори в STL
- Інкапсуляція в C ++