Пространства имен (Namespaces)
Пространства имен используются для логической группировки связанных функций, классов и переменных, чтобы избежать конфликтов имен.
namespace MyNamespace {
    void myFunction() {
        std::cout << "Hello from MyNamespace!" << std::endl;
    }
}Глобальная область видимости
Глобальная область видимости охватывает весь файл и все функции в нем. Глобальные переменные и функции объявляются вне всех функций и классов.
int globalVar = 10;
 
void globalFunction() {
    std::cout << "Hello from globalFunction!" << std::endl;
}using Объявления
using объявления позволяют упростить доступ к членам пространств имен, избегая необходимости постоянно указывать полное имя пространства имен.
using namespace MyNamespace;
 
int main() {
    myFunction();  // вместо MyNamespace::myFunction()
    return 0;
}Можно также использовать using для отдельных элементов:
using MyNamespace::myFunction;
 
int main() {
    myFunction();
    return 0;
}Особенности перегрузки функций в пространстве имен
Перегрузка функций в пространстве имен позволяет иметь несколько функций с одним и тем же именем, но с различными параметрами.
namespace MyNamespace {
    void myFunction(int x) {
        std::cout << "Function with int: " << x << std::endl;
    }
 
    void myFunction(double x) {
        std::cout << "Function with double: " << x << std::endl;
    }
}
 
int main() {
    MyNamespace::myFunction(5);     // Вызовет myFunction(int)
    MyNamespace::myFunction(3.14);  // Вызовет myFunction(double)
    return 0;
}Перегруженные функции должны отличаться сигнатурами (типами и/или количеством параметров). Это позволяет компилятору различать их при вызове.