К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

3. Сокрытие имен

Переменная внутри вложенного блока может иметь то же имя, что и переменная внутри внешнего блока. Когда подобное случается, то переменная во вложенном (внутреннем) блоке «скрывает» внешнюю переменную. Это называется сокрытием имен:

#include <iostream>
 
int main()
{ // внешний блок
int oranges(5); // внешняя переменная oranges
 
if (oranges >= 5) // относится к внешней oranges
{ // вложенный блок
int oranges; // скрывается внешняя переменная oranges
 
// Идентификатор oranges теперь относится к вложенной переменной oranges.
// Внешняя переменная oranges временно скрыта
 
oranges = 10; // здесь мы присваиваем значение 10 вложенной переменной oranges, не внешней!
 
std::cout << oranges << std::endl; // выводим значение вложенной переменной oranges
} // вложенная переменная oranges уничтожается
 
// Идентификатор oranges опять относится к внешней переменной oranges
 
std::cout << oranges << std::endl; // выводим значение внешней переменной oranges
 
return 0;
} // внешняя переменная oranges уничтожается

Результат выполнения программы:

10
   5

Здесь мы сначала объявляем переменную oranges во внешнем блоке. Затем объявляем вторую переменную oranges, но уже во вложенном (внутреннем) блоке. Когда мы присваиваем oranges значение 10, то оно относится к переменной во вложенном блоке. После вывода этого значения (и окончания внутреннего блока), внутренняя переменная oranges уничтожается, оставляя внешнюю oranges с исходным значением (5), которое затем выводится. Результат выполнения программы был бы тот же, даже если бы мы назвали вложенную переменную по-другому (например, nbOranges).

Правило: Избегайте использования вложенных переменных с именами, идентичными именам внешних переменных.

 


Предыдущая        В начало страницы       Следующая
3