Our Blog

Назначение операции разрешения области действия

Довольно часто при программировании на C++ мы используем эту операцию. Операция разрешения области действия обозначается двумя символами двоеточие без пробела – “::” Узнали? Рассмотрим ее назначение.

Она бывает двух типов: унарная и бинарная.
Унарная операция разрешения области действия позволяет получить доступ к глобальной переменной (область видимости – вся программа) из блока, в котором может быть объявлена локальная переменная (область видимости начинается ее объявлением и заканчивается закрытием текущего блока) с таким же именем.
Пример:

int a; //глобальная переменная
void func1(){
int a; //локальная переменная
a=10; //обращение к локальной переменной
::a=100; //обращение к глобальной переменной
}

Бинарная операция разрешения области действия позволяет ссылаться на элемент класса при наличии одноименных переменных или функций, объявленных вне его или в нескольких классах. Также данная операция используется при описании функции-метода вне класса.
Операция разрешения области действия используется в следующих случаях:

1) Локальная переменная, объявленная в теле функции, имеет то же имя, что и некая глобальная переменная. По умолчанию компилятор считает, что все упоминания этого имени в теле функции относятся к локальной переменной, а доступ к глобальной переменной осуществляется через операцию :: (унарную)
Пример:

<...>
int var = 0;
int main()
{
int var = 1;
cout << var; // 1
cout << ::var; // 0
return 0;
}

2) Имя в пространстве имен не разрешено оператором using.
Пример:

<...>
//нет using namespace std;
int main()
{
std::cout << "Hello world" << std::endl;
return 0;
}

3) Для доступа к статическим свойствам и методам классов.
Пример:

<...>
class MyClass
{
public:
<...>
static int a;
};

int main()
{
int MyClass::a = 1;
MyClass c;
cout << c.a; // 1
return 0;
}

4) Если метод класса реализован вне его определения.
Пример:

MyClass.h
<...>
class MyClass
{
public:
MyClass();
~MyClass();
}

MyClass.cpp
<...>
MyClass::MyClass()
{
<...>
}
Comments ( 0 )
    -->