Пространства имен (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;
}

Перегруженные функции должны отличаться сигнатурами (типами и/или количеством параметров). Это позволяет компилятору различать их при вызове.