Довольно часто при программировании на 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 )