Довольно часто при программировании на C++ мы используем эту операцию. Операция разрешения области действия обозначается двумя символами двоеточие без пробела – “::” Узнали? Рассмотрим ее назначение.
Она бывает двух типов: унарная и бинарная.
Унарная операция разрешения области действия позволяет получить доступ к глобальной переменной (область видимости – вся программа) из блока, в котором может быть объявлена локальная переменная (область видимости начинается ее объявлением и заканчивается закрытием текущего блока) с таким же именем.
Пример:
1.
int
a;
//глобальная переменная
2.
void
func1(){
3.
int
a;
//локальная переменная
4.
a=10;
//обращение к локальной переменной
5.
::a=100;
//обращение к глобальной переменной
6.
}
Бинарная операция разрешения области действия позволяет ссылаться на элемент класса при наличии одноименных переменных или функций, объявленных вне его или в нескольких классах. Также данная операция используется при описании функции-метода вне класса.
Операция разрешения области действия используется в следующих случаях:
1) Локальная переменная, объявленная в теле функции, имеет то же имя, что и некая глобальная переменная. По умолчанию компилятор считает, что все упоминания этого имени в теле функции относятся к локальной переменной, а доступ к глобальной переменной осуществляется через операцию :: (унарную)
Пример:
01.
<...>
02.
int
var = 0;
03.
int
main()
04.
{
05.
int
var = 1;
06.
cout << var;
// 1
07.
cout << ::var;
// 0
08.
return
0;
09.
}
2) Имя в пространстве имен не разрешено оператором using.
Пример:
1.
<...>
2.
//нет using namespace std;
3.
int
main()
4.
{
5.
std::cout <<
"Hello world"
<< std::endl;
6.
return
0;
7.
}
3) Для доступа к статическим свойствам и методам классов.
Пример:
01.
<...>
02.
class
MyClass
03.
{
04.
public
:
05.
<...>
06.
static
int
a;
07.
};
08.
09.
int
main()
10.
{
11.
int
MyClass::a = 1;
12.
MyClass c;
13.
cout << c.a;
// 1
14.
return
0;
15.
}
4) Если метод класса реализован вне его определения.
Пример:
01.
MyClass.h
02.
<...>
03.
class
MyClass
04.
{
05.
public
:
06.
MyClass();
07.
~MyClass();
08.
}
09.
10.
MyClass.cpp
11.
<...>
12.
MyClass::MyClass()
13.
{
14.
<...>
15.
}
Comments ( 0 )