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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 267

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ псСвдонимы для ΠΈΠΌΠ΅Π½ Ρ‡Π»Π΅Π½ΠΎΠ² пространства ΠΈΠΌΠ΅Π½. ВмСсто этого ΠΎΠ½Π° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡˆΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, которая содСрТит ΠΈ пространство ΠΈΠΌΠ΅Π½, ΠΈ саму Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ using.

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

Рассмотрим самый простой случай. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² глобальной области видимости ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ пространство ΠΈΠΌΠ΅Π½ А ΠΈ функция f(). Если функция f() ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ using для пространства ΠΈΠΌΠ΅Π½ А, функция f() Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° пространства ΠΈΠΌΠ΅Π½ А присутствовали Π² глобальной области видимости Π΄ΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f().

// пространство ΠΈΠΌΠ΅Π½ А ΠΈ функция f() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² глобальной области

// видимости

namespace А {

 int i, j;

}

void f() {

 using namespace A; // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· области видимости А Π²

                    // Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

 cout << i * j << endl; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ i ΠΈ j ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ A

 // ...

}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² using

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

namespace blip {

 int i = 16, j = 15, k = 23; // Π΄Ρ€ΡƒΠ³ΠΈΠ΅ объявлСния

}

int j = 0; // ok: j Π² пространствС ΠΈΠΌΠ΅Π½ blip скрыта

void manip() {

 // Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using; ΠΈΠΌΠ΅Π½Π° пространства ΠΈΠΌΠ΅Π½ blip "Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ" ΠΊ

 // глобальной области видимости

 using namespace blip; // ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ::j ΠΈ blip::j

 // обнаруТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании j

 ++i;        // присваиваСт blip::i Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 17

 ++j;        // ошибка нСоднозначности: global j ΠΈΠ»ΠΈ blip::j?

 ++::j;      // ok: присваиваСт глобальной j Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1

 ++blip::j;  // ok: присваиваСт blip::j Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 16

 int k = 97; // локальная k скрываСт blip::k

 ++k;        // присваиваСт локальной k Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 98

}

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ manip() Π΄Π΅Π»Π°Π΅Ρ‚ всС ΠΈΠΌΠ΅Π½Π° пространства ΠΈΠΌΠ΅Π½ blip доступными нСпосрСдствСнно. Π’ΠΎ Π΅ΡΡ‚ΡŒ функция manip() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этим Ρ‡Π»Π΅Π½Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠΌΠ΅Π½.

Π§Π»Π΅Π½Ρ‹ пространства ΠΈΠΌΠ΅Π½ blip выглядят Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ области видимости. Если пространство ΠΈΠΌΠ΅Π½ blip ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² глобальной области видимости, Π΅Π³ΠΎ Ρ‡Π»Π΅Π½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² глобальной области видимости.

Когда пространство ΠΈΠΌΠ΅Π½ вводится Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, ΠΈΠΌΠ΅Π½Π° Π² пространствС ΠΈΠΌΠ΅Π½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ) Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области видимости. НапримСр, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ manip() Ρ‡Π»Π΅Π½ j пространства ΠΈΠΌΠ΅Π½ blip вступаСт Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ j. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹, Π½ΠΎ для использования ΠΈΠΌΠ΅Π½ΠΈ слСдуСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, какая вСрсия имССтся Π² Π²ΠΈΠ΄Ρƒ. Π›ΡŽΠ±ΠΎΠ΅ использованиС ΠΈΠΌΠ΅Π½ΠΈ j Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ manip() Π²Π΅Π΄Π΅Ρ‚ ΠΊ нСоднозначности.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ имя, ΠΊΠ°ΠΊ j, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ области видимости, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ имя. Для указания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² глобальной области видимости, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ::j, Π° для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² пространствС ΠΈΠΌΠ΅Π½ blip β€” blip::j.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π° находятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… областях видимости, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ объявлСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ manip() ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΈΠΌΠ΅Π½ пространства ΠΈΠΌΠ΅Π½. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная k скрываСт Ρ‡Π»Π΅Π½ пространства ΠΈΠΌΠ΅Π½ blip::k. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ k Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ manip() Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, это ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ k.

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ объявлСния using ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, содСрТащий Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ ΠΈΠ»ΠΈ объявлСниС using Π² своСй области видимости Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Π²Π²ΠΎΠ΄ΠΈΡ‚ свои ΠΈΠΌΠ΅Π½Π° Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΅Π³ΠΎ интСрфСйса, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈΠ»ΠΈ объявлСний using, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π² функциях ΠΈΠ»ΠΈ пространствах ΠΈΠΌΠ΅Π½ (см. Ρ€Π°Π·Π΄Π΅Π» 3.1).

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² using

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using, вводящиС Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости всС ΠΈΠΌΠ΅Π½Π° ΠΈΠ· пространства ΠΈΠΌΠ΅Π½, ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎ просты Π² использовании. ЕдинствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π° всСх Ρ‡Π»Π΅Π½ΠΎΠ² пространства ΠΈΠΌΠ΅Π½. Π₯ΠΎΡ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ простым, ΠΎΠ½ создаСт Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ использовано ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° using сдСлаСт Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² Π½ΠΈΡ…, Ρ‚ΠΎ вновь Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° загромоТдСния глобального пространства ΠΈΠΌΠ΅Π½.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΏΠΎΠ»Π½Π΅ работоспособная Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пСрСстанСт ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΈΠΌΠ΅Π½ Π½ΠΎΠ²ΠΎΠΉ вСрсии с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались ΠΏΡ€Π΅ΠΆΠ΄Π΅.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° вызванная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ using ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСоднозначности обнаруТиваСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ примСнСния. Π‘Ρ‚ΠΎΠ»ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ примСнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ using ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объявлСниС using для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ пространства ΠΈΠΌΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ количСство ΠΈΠΌΠ΅Π½, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π² пространство ΠΈΠΌΠ΅Π½. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ошибки нСоднозначности, ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся объявлСниС using, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ объявлСния, Π° это сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΈΡ… поиск.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ самого пространства ΠΈΠΌΠ΅Π½.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 18.2.2

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 18.15. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ объявлСниСм ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ using.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 18.16. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ объявлСния using для всСх Ρ‡Π»Π΅Π½ΠΎΠ² пространства ΠΈΠΌΠ΅Π½ Exercise находятся Π² области, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ позиция 1. Π§Ρ‚ΠΎ, Ссли вмСсто этого ΠΎΠ½ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 2? Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ вопрос, Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ объявлСния using Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ using для пространства ΠΈΠΌΠ΅Π½ Exercise.

namespace Exercise {

 int ivar = 0;

 double dvar = 0;

 const int limit = 1000;

}

int ivar = 0;

// позиция 1

void manip() {

 // позиция 2

 double dvar = 3.1416;

 int iobj = limit + 1;

 ++ivar;

 ++::ivar;

}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 18.17. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ вопрос.

18.2.3. ΠšΠ»Π°ΡΡΡ‹, пространства ΠΈΠΌΠ΅Π½ ΠΈ области видимости

Поиск ΠΈΠΌΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² пространствС ΠΈΠΌΠ΅Π½, происходит согласно ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ поиска Π² языкС Π‘++: сначала Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎ внСшнСй области видимости. Имя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² пространствС ΠΈΠΌΠ΅Π½, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… пространств ΠΈΠΌΠ΅Π½, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ глобальноС пространство ΠΈΠΌΠ΅Π½. Однако ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ использования Π² Π±Π»ΠΎΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС Π΅Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹.

namespace A {

 int i;

 namespace Π’ {

  int i; // скрываСт A::i Π² Π’

  int j;

  int f1() {

   int j;    // j локальна для f1() ΠΈ скрываСт A::B::j

   return i; // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ B::i

  }

 } // пространство ΠΈΠΌΠ΅Π½ Π’ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ, ΠΈ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π° большС Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌΡ‹

 int f2() {

  return j; // ошибка: j Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°

 }

 int j = i; // инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ A::i

}

Когда класс располоТСн Π² пространствС ΠΈΠΌΠ΅Π½, процСсс поиска остаСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ: ΠΊΠΎΠ³Π΄Π° имя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ, Π΅Π³ΠΎ поиск начинаСтся Π² самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Ρ‚Π΅ΠΌ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… класса (Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы), Π° ΠΏΠΎΡ‚ΠΎΠΌ Π² ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… областях видимости, ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ пространства ΠΈΠΌΠ΅Π½: