Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4141

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 12. Пространства имен 

161 


  int n = 10; 
  cout << n;  // печатает 10 
  return 0; 

Объявление 

using

  может  также  использоваться  для  вложенных 

пространств имен. 
В  листинге  12.7  приведен  пример  использования  объявления 

using

 для вложенных пространств имен. 

Листинг 12.7. Использование объявления 

using

  

с вложенными пространствами имен 

#include <iostream> 
using std::cout; 
namespace PublicNames 

 

namespace MyNames 

 

 

 

int add(int a, int b) { return a + b; } 

 


int main() 

 

using PublicNames::MyNames::add; 

 

cout << add(2,3);  // печатает 5 

 

return 0; 

12.6. Директива 

using

 

Для  объявления  сразу  всех  имен  из  некоторого  пространства 
имен  используется  директива 

using

,  которая  имеет  следующий 

синтаксис: 

  using namespace имя_пространства_имен; 

В  листинге  12.8  приведен  пример  использования  директивы 

using


background image

Часть II. Язык программирования С++ 

162 

Листинг 12.8. Использование директивы 

using

 

#include <iostream> 
using namespace std; 
int main() 

  cout << "Hello word" << endl; 
  return 0; 

Правила использования директивы 

using

 совпадают с правилами 

использования объявления 

using

. Но при этом следует учитывать, 

что  директива 

using

  для  вложенного  пространства  имен  не  объ-

являет имена из объемлющего пространства имен. 

12.7. Псевдонимы 

Чтобы избежать дублирования имен, для пространства имен мо-
жет быть выбрано длинное имя. В этом случае для удобства запи-
си этого длинного имени также определяют короткий 

псевдоним

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

  namespace псевдоним = имя_пространства_имен; 

Псевдоним используется точно так же, как и само имя простран-
ства имен. 
В листинге 12.9 приведен пример использования псевдонима для 
имени пространства имен. 

Листинг 12.9. Использование псевдонима для имени  
пространства имен 

#include <iostream> 
using namespace std; 
namespace Very_Important_Namespace 


background image

Глава 12. Пространства имен 

163 


  int n = 1; 

namespace VIN = Very_Important_Namespace; 
int main() 

  cout << VIN::n << endl;  // печатает 1 
  return 0; 

Псевдоним  можно  определять  и  для  имен  вложенных  про-
странств имен. Например: 

  namespace Names = PublicNames::MyNames; 

Кроме  того,  одно  пространство  имен  может  иметь  несколько 
псевдонимов, например: 

  namespace  N = Names; 
  namespace  M = Names; 
  namespace  L = M; 

12.8. Искажение имен переменных 

Для  реализации  оператора  разрешения  области  видимости  ком-
пилятор  добавляет  к  внутреннему  имени  переменной  дополни-
тельные символы, которые определяют пространство имен пере-
менной.  Такое  именование  переменных  называется 

декориро-

ванием

 (decorating) или 

искажением

 (mangling) 

имен переменных

Так же как и декорирование имен функций, декорирование имен 
переменных  не  стандартизировано.  Поэтому  в  каждом  компиля-
торе  определяется  свой  порядок  декорирования  имени  перемен-
ной. 
Как и в случае с функциями, для обращения в программе, напи-
санной  на  языке  программирования  С++,  к  имени  переменной, 
определенной  в  объектном  модуле,  полученном  при  помощи 
компилятора  языка  программирования  C,  нужно  использовать 

спецификацию связывания

, которая имеет следующий синтаксис: 

  extern "C" имя_переменной 


background image

Часть II. Язык программирования С++ 

164 

или: 

  extern "C" 
  { 
    // блок объявления имен 
  } 

Например,  предположим,  что  в  программе  на  языке  программи-
рования  С++  используется  переменная 

n

  типа 

int

  из  объектной 

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

  extern "C" int n; 

 


background image

  

 
 

Г Л А В А  

13 

 
 
 

Обработка исключений 

 

13.1. Механизм обработки  
исключений 

Механизм  обработки  исключений  (исключительных  ситуаций) 
предназначен для передачи управления при возникновении таких 
ситуаций  во  время  исполнения  программы,  которые  не  могут 
быть  разрешены  на  месте  их  возникновения.  Механизм  обра- 
ботки исключений построен на базе следующих четырех компо-
нентов: 

 

исключение; 

 

выражение 

throw

 

блок 

try

 

блок 

catch

Синтаксически 

исключение

 (exception) представляет собой объект 

произвольного  типа.  Этот  объект  используется  для  идентифика-
ции ситуации, которая требует обработки. 
Исключение 

генерируется

 или, как еще говорят, 

выбрасывается

 

выражением 

throw

, которое имеет следующий вид: 

  trow выражение 

Результатом  вычисления 

выражения

  является  объект,  который 

представляет исключение. 

  

 


Смотрите также файлы