Пространствата от имена (namespaces
) са въведени в C++ като поддръжка на така нареченото модулно програмиране. По същество пространствата от имена позволяват изграждането на дървовидна структура от имена на идентификаторите в една C++ програма като по този начин намаляват риска от конфликт на имената.
Да си представим за момент, че файловата структура на някакъв компютър няма добре познатата йерархична структура от директории, поддиректории и файлове. В такъв случай всички файлове биха се съхранявали в едно общо глобално хранилище, което се вижда постоянно от всеки потребител и приложение. Като следствие от подобна ситуация биха възникнали ред трудности при преглеждане, търсене или копиране на файлове. Освен това лесно може да си представим за многобройни конфликти на имената на файловете, когато различни потребители искат да използват едно и също име за два различни файла.
Подобно е и положението при една програма, когато нейният размер започне да нараства – конфликтите на имена започват да стават често явление. Точно за решаването на този проблем в C++ са въведени пространствата от имена. Пространствата от имена са аналогични на директориите в горния пример. Те могат да бъдат влагани едно в друго и да образуват йерархични структури от имена, подобни на файловата система. Такава йерархична структура от имена може лесно да предпази кода на една програма от конфликти на имената. Повечето от компонентите на стандартната C++ библиотека например, са групирани в пространството от имена std
. То от своя страна е разделено на подпространства от имена.
Дефиниране на пространство от имена
За дефиниране на именувано пространство от имена се използва ключовата дума namespace
. Например:
namespace elsys { class School { ... }; class Student { ... }; };
В този фрагмент са декларирани два класа School
и Student
като членове на пространството от имена elsys
.
Към едно пространство от имена винаги може да се добавят нови имена. Например, в следващия фрагмент към пространството от имена elsys
се добавя класа Teacher
:
namespace elsys { class Teacher { ... }; };
Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране