Пространства имен namespace
Иногда при написании кода, особенно разными программистами могут использоваться одинаковые названия функций и переменных, чтобы не было конфликтов их можно «облачить» в пространство имен (namespace) это что-то вроде «принадлежности» к чему либо.
Например создадим пространства имен FirstNS и SecondNS внутри которых будут как одинаковые, так и разные имена функций/переменных/классов.
namespace FirstNS
{
void Func1(){}
int variable;
class Person;
}
namespace SecondNS
{
void Func1(){}
void Func2(){}
int variable;
class Person;
}
Теперь внутри main:
мы можем явно указать к какому пространству имен принадлежит конкретная функция/переменная/класс.
FirstNS::Func1();
SecondNS::Func1();
Примечание:
Если мы используем только 1 пространство имен (или несколько, но знаем что конфликтов нет), то можно явно указывать какое пространство имен используется:
например: using namespace FirstNS;
в этом случае можно писать Func1(); вместо FirstNS::Func1();
Стоит отметить, что пространства имен могут быть внутри других более крупных пространств имен.