Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Освой ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π‘++ Π·Π° 21 дСнь.Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 118

Автор ДТСсс Π›ΠΈΠ±Π΅Ρ€Ρ‚ΠΈ

Pane::x = x;

Pane::y = Ρƒ;

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово using

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово using ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ Π² качСствС спСцификатора ΠΏΡ€ΠΈ объявлСнии Ρ‡Π»Π΅Π½ΠΎΠ² пространства ΠΈΠΌΠ΅Π½, Π½ΠΎ синтаксис использования using ΠΏΡ€ΠΈ этом мСняСтся.

ИспользованиС using ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова using Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ области видимости всСх Ρ‡Π»Π΅Π½ΠΎΠ² пространства ΠΈΠΌΠ΅Π½. ВпослСдствии это позволяСт ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‡Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½, Π½Π΅ указывая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ имя пространства. ИспользованиС using ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

namespace Window {

   int valuo1 = 20;

   int value2 - 40;

}

...

Window::value1 = 10;

using namespace Window;

value2 = 30;


ВсС Ρ‡Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½ Window становятся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, начиная ΠΎΡ‚ строки using namespace Window; ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ссли для обращСния ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ value1 Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ пространство ΠΈΠΌΠ΅Π½, Ρ‚ΠΎ Π² этом Π½Π΅Ρ‚ нСобходимости ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ value2, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using сдСлал Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ всС Ρ‡Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½ Window.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² любом ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости. Когда Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π΄Π°Π½Π½ΠΎΠ³ΠΎ модуля, автоматичСски становятся Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ всС Ρ‡Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π² этом ΠΌΠΎΠ΄ΡƒΠ»Π΅. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ это Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

namespace Window {

   int value1 = 20;

   int value2 = 40 ;

}

//...

void f()

{

   {

      using namespace Window ; value2 = 30 ;

   }

   value2 = 20 ; //ошибка!

}


ПослСдняя строка ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f() β€” value2 = 20 β€” Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎ врСмя компиляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная value2 Π² этом мСстС Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠ°. Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, заданная ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ using, Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ сразу Π·Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ строкС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ случаС объявлСния Π²Π½ΡƒΡ‚Ρ€ΠΈ модуля Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… всС ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Π² этом ΠΌΠΎΠ΄ΡƒΠ»Π΅, Π±ΡƒΠ΄ΡƒΡ‚ скрыты. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π² случаС совпадСния ΠΈΡ… областСй видимости. Π”Π°ΠΆΠ΅ Ссли пСрСмСнная, объявлСнная Π² пространствС ΠΈΠΌΠ΅Π½, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ using послС объявлСния локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, послСдняя всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Π­Ρ‚ΠΎ наглядно ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

namespace Window {

   int value1 = 20;

   int value2 = 40 ;

}

//...

void f()

{

   int value2 = 10;

   using namespace Window;

   std::cout << value2 << std::endl;

}


ΠŸΡ€ΠΈ выполнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° экранС появится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10, Π° Π½Π΅ 40, подтвСрТдая Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ пСрСмСнная value2 пространства ΠΈΠΌΠ΅Π½ Window скрываСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ value2 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f(). Если всС ΠΆΠ΅ трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ пространства ΠΈΠΌΠ΅Π½, явно ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя пространства.

ΠŸΡ€ΠΈ использовании ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… объявлСн ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Π²Π½ΡƒΡ‚Ρ€ΠΈ пространства ΠΈΠΌΠ΅Π½, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π΄Π²ΡƒΡΠΌΡ‹ΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π΅Π΅, всСгда явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ имя пространства ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

namespace Window {

   int value1 = 20;

}

//...

using namespace Window;

int value1 = 10;

void f()

{

   value1 = 10 ;

}


Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f(). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using сообщаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Window::value1 Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости. Однако Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ другая глобальная пСрСмСнная с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Какая ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f()? ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ошибка Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π΅ Π²ΠΎ врСмя объявлСния ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π½Π΅ΠΉ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f().

ИспользованиС using Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ…

НазначСниС using Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ использованию using ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° с Ρ‚ΠΎΠΉ лишь Ρ€Π°Π·Π½ΠΈΡ†Π΅ΠΉ, Ρ‡Ρ‚ΠΎ обСспСчиваСтся Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ контроля. Π­Ρ‚ΠΎΡ‚ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для открытия видимости Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, объявлСнного Π² пространствС ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

namespace Window {

   int value1 = 20;

   int value2 = 40;

   int value3 = 60;

}

//...

using Window::value2; //ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ доступа ΠΊ value2 Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅

Window::value1 = 10; //для value1 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½

value2 = 30;

Window::value3 = 10; // для value3 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½


Π˜Ρ‚Π°ΠΊ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ using ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ пространства ΠΈΠΌΠ΅Π½, Π½Π΅ повлияв Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² этом пространствС. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ пСрСмСнная value2 вызываСтся Π±Π΅Π· явного указания пространства ΠΈΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ value1 ΠΈ value3. ИспользованиС using ΠΏΡ€ΠΈ объявлСнии обСспСчиваСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° пространства ΠΈΠΌΠ΅Π½. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ использования using ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ доступ сразу ΠΊΠΎ всСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ пространства ΠΈΠΌΠ΅Π½.

Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ распространяСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ°, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΎ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ объявлСнии. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ using ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ глобально, Ρ‚Π°ΠΊ ΠΈ Π² локальной области.

Если Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π³Π΄Π΅ ΡƒΠΆΠ΅ объявлСн ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ· пространства ΠΈΠΌΠ΅Π½, добавляСтся Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС компиляции. Ошибкой Π±ΡƒΠ΄Π΅Ρ‚ ΠΈ объявлСниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ Π² области, Π³Π΄Π΅ ΡƒΠΆΠ΅ сущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

namespace Window {

   int value1 = 20;

   int value2 = 40;

}

//...

void f()

{

   int value2 = 10;

   using Window::value2; // ряд обьявлСиий

   std::cout << value2 << std::endl;

}


ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f() ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная с ΠΈΠΌΠ΅Π½Π΅ΠΌ value2 Π² этом Π±Π»ΠΎΠΊΠ΅ ΡƒΠΆΠ΅ объявлСна. Π’ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получится, Ссли объявлСниС с using Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ объявлСниСм локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ valuo2.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ пространства ΠΈΠΌΠ΅Π½, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ с помошью using, скрываСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ этой области. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

namespace Window {

   int value1 - 20;

   int va]ue2 - 40;

}

int value2 = 10;

//...

void f()

{

   using Window::value2;

   std::cout << value2 << std::endl;

}


ОбъявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ using Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f() скрываСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ value2.

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, этот способ использования using позволяСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ области видимости ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² пространства ΠΈΠΌΠ΅Π½. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using открываСтдоступ n локальной области ΠΊΠΎ всСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΌ Π² пространствС ΠΈΠΌΠ΅Π½. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ using Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ…, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми прСимущСствами, прСдоставляСмыми пространством ΠΈΠΌΠ΅Π½ΠΈ. Π―Π²Π½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ области видимости для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² позволяСт ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° using ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ доступ сразу ΠΊΠΎ всСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ пространства ΠΈΠΌΠ΅Π½.

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ пространства ΠΈΠΌΠ΅Π½

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ пространства ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пространства. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, псСвдоним прСдставляСт собой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ссылки Π½Π° пространство ΠΈΠΌΠ΅Π½. Π­Ρ‚ΠΎ вСсьма эффСктивно, Ссли имя пространства ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ псСвдонимов ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с пространствами ΠΈΠΌΠ΅Π½. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

namespace the_software_company {

   int value;

   //...

}

the_software_company::value = 10;

...

namespace TSC = the_software_company;

TSC::value = 20;


НСдостаток этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ псСвдоним ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ области видимости. Π’ этом случаС компилятор сообщит ΠΎΠ± ошибкС, ΠΈ Π²Ρ‹ смоТСтС просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ псСвдоним.

НСимСнованныС пространства ΠΈΠΌΠ΅Π½

Π’Π°ΠΊΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½ΠΈ. НаиболСС часто ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½. КаТдая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ пространство. ВсС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ пространства ΠΈΠΌΠ΅Π½, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ просто ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ прСфиксов. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ прСдставлСны ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π²ΡƒΡ… Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… пространств, располоТСнных Π² Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….

// Ρ„Π°ΠΉΠ»: one.cpp

namespace {

   int value;

   char p(char *p);

   //...

}


// Ρ„Π°ΠΉΠ»: two.cpp

namespace {

   int value;

   char p(char *p);

   //...

}


int main()

{