C++ Программирование в среде С++ Builder 5



Пространства имен - часть 3


#include <stdio.h>

namespace ALPHA {

int x = 11;

int у = 111;

int v = 1111;

} namespace BETA {

int x = 22;

int у - 222;

int z = 2222;

}

int main(void) {

using namespace ALPHA; // Конфликта не возникает до

using namespace BETA; // момента действительного

// обращения к элементам х и у.

using ВЕТА::х;

// Локальная квалификация х.

int z = 3333; // Локальная переменная.

printf ("Global х = %d, у = %d, z = %d, v = %d.\n", х, ALPHA::y, ::z, v);

// х квалифицирована

// локально, у - явно.

printf("Local z = %d.\n", z) ;

return 0;

}

Программа печатает:

Global х = 22, у = 111, z = 2222, v = 1111. Local z = 3333.

Здесь показан случай, когда могут возникать конфликты между двумя пространствами имен, используемыми одновременно. В теле главной процедуры указаны два именных пространства ALPHA и BETA, которые оба объявляют глобальные переменные х и у. В данный момент у компилятора не возникает никаких возражений. Ошибка случилась бы, например, если ниже мы обратились к переменной у без какой-либо квалификации. В общем, разберите внимательно этот пример — каким образом компилятор разрешает неоднозначные ссылки на различные символы.

Псевдонимы именных пространств

Можно объявлять псевдонимы для именных пространств, если, например, полная квалификация символа оказывается слишком уж длинной:

namespace BORLAND_INTERNATIONAL

{

// Тело именного пространства...

namespace NESTED_BORLAND_INTERNATIONAL

{

// Тело вложенного именного пространства... }

// Псевдонимы:

namespace BI = BORLAND_INTERNATIONAL;

namespace NBI = BORLAND_INTERNATIONAL::

NESTED_BORLAND_INTERNATIONAL;




Содержание  Назад  Вперед