**Область видимости** - возможность доступа к чему-либо:
1. Область видимости файла (объявление переменных)
```cpp
int n;
int m = 10;
```
2. Пространство имен (**namespace**)
```cpp
namespace Project {
	int x;
}
```
3. Область видимости блоков (локальные переменные)
```cpp
int main() {
	for (i = 0; i < 10; i++) {
		int x;
	}
}
```
4. Область видимости функций
```cpp
void f1() {
	int i;
	...
}
```
5. Область видимости класса
```cpp
class type {
	void func();
}
void type::func();
```
  
Определять функции нужно раздельно. Нельзя определить одну функцию внутри другой. Исключение - определение компонентных функций возможно внутри внешних функций, если внешние функции имеют свои классы. Оператор `::` имеет самый высокий приоритет среди операторов. `::` имеет бинарную и унарную формы. Самый маленький приоритет имеет оператор `,`.
## Вложенные классы
```cpp
int N;
int J;
int M = 10;
class pixel {
public:
	 class type_1 {...};
	 class type_2 {...};
};

pixel::type_1::J;
pixel::type_2::J;
pixel::J;
```

