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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ²Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 34

Автор Π”. БтСфСнс

#ifndef DEVICES_H__ // см. Ρ€Π΅Ρ†Π΅ΠΏΡ‚ 2.0

#define DEVICES_H__


#include <string>

#include <list>


namespace hardware {

 class Device {

  // ...

 };


 class DeviceMgr {

  // ...

 };


}

#endif // DEVICES_H__

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прост: Β«ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅Β» всС, Ρ‡Ρ‚ΠΎ трСбуСтся ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² пространство ΠΈΠΌΠ΅Π½, Π² Π±Π»ΠΎΠΊ namespace.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ β€” это объявлСниС Device ΠΈ DeviceMgr, Π½ΠΎ Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ трСбуСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ΠΈΡ… рСализациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Ρ„Π°ΠΉΠ»Π΅ Devices.cpp. И снова ΠΎΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ всС Π² Π±Π»ΠΎΠΊ namespace β€” ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒΡΡ содСрТимому этого пространства ΠΈΠΌΠ΅Π½.

#include "Devices.h"

#include <string>

#include <list>


namespace hardware {

 using std::string;

 using std::list;

 // РСализация Device ΠΈ DeviceMgr

}

Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ пространство ΠΈΠΌΠ΅Π½ hardware содСрТит всС, Ρ‡Ρ‚ΠΎ трСбуСтся. ВсС, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ, β€” это Π³Π΄Π΅-Ρ‚ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Для этого имССтся нСсколько способов. Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» использован Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2.5, состоит Π² ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ класса Device, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ пространство ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ здСсь.

#ifndef DEVICEWIDGET_H_

#define DEVICEWIDGET_H_


#include "Devices.h"


namespace ui {

 class Widget { /* ... */ };

 class DeviceWidget : public Widget {

 public:

  DeviceWidget(const hardware::Device& dev) : device_(dev) {}

  // Other stuff...

 protected:

  hardware::Device device_;

 };

}

#endif // DEVICEWIDGET_H__

Π’Π°ΠΊΠΆΠ΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ этот способ Π² main Π² main.cpp.

int main() {

 hardware::Device d;

 ui::DeviceWidget myWidget(d);

}

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

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

using hardware::Device;


int main() {

 Device d; // ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π΅ трСбуСтся

 ui::DeviceWidget myWidget(d);

}

Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ вмСсто Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ просто ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° этот псСвдоним. Или ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ using ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС содСрТимоС пространства ΠΈΠΌΠ΅Π½, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ содСрТащийся Π² Π½Π΅ΠΌ Ρ‚ΠΈΠΏ.

using namespace hardware;


int main() {

 Device d:

 ui::DeviceWidget myWidget(d);

}

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²Ρ‹, вСроятно, ΡƒΠΆΠ΅ использовали, ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΡ€ΠΈ использовании стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (эту ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² этой ΠΊΠ½ΠΈΠ³Π΅). Вся стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° находится Π² пространствС ΠΈΠΌΠ΅Π½ std, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ часто Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠ΅:

using namespace std;

Π˜ΠΌΠΏΠΎΡ€Ρ‚ всСго пространства ΠΈΠΌΠ΅Π½ часто являСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ рассматриваСтся ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π² этой ΠΊΠ½ΠΈΠ³Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ содСрТимоС пространства ΠΈΠΌΠ΅Π½ std Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ†Π΅Π»ΡŒΡŽ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ясности ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ этого Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ всСго пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… пространств ΠΈΠΌΠ΅Π½ ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСтся. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ сущСствования пространств ΠΈΠΌΠ΅Π½ являСтся сниТСниС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½. ΠŸΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… пространств ΠΈΠΌΠ΅Π½ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½ увСличиваСтся. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ прСкрасно ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ· пространств ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ, ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сборкС ΠΊΠΎΠ΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ содСрТимоС пространства ΠΈΠΌΠ΅Π½ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½. НапримСр, пространство ΠΈΠΌΠ΅Π½ hardware, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2.5, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π° самом Π΄Π΅Π»Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ большоС количСство сСтСвых классов ΠΈ Π΅Ρ‰Π΅ большС классов устройств, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π²Π»ΠΎΠΆΠΈΠ² Π΅Ρ‰Π΅ нСсколько ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½.

namespace hardware {

 namespace net {

  // сСтСвыС классы

 }

 namespace devices {

  // классы устройств

 }

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ доступ ΠΊ элСмСнтам, содСрТащимся Π² пространствС ΠΈΠΌΠ΅Π½, стал нСсколько Π±ΠΎΠ»Π΅Π΅ слоТным.

// Π’ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅...

using hardware::devices::Device;

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

ПсСвдоним пространства ΠΈΠΌΠ΅Π½ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: имя (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠΌΠ΅Π½ΠΈ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ) пространства ΠΈΠΌΠ΅Π½. Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ using, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании класса ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя, создайтС для Π½Π΅Π³ΠΎ псСвдоним.

using dev = hardware::devices;

// ...

dev::Device d;

Π—Π°Ρ‚Π΅ΠΌ этот псСвдоним ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ссылкС Π½Π° элСмСнты ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ пространства ΠΈΠΌΠ΅Π½.

C++ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт автоматичСский поиск Π² пространствах ΠΈΠΌΠ΅Π½, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ относятся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ описываСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² пространствС ΠΈΠΌΠ΅Π½ (dev β€” это пространство ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявлСн Device):

void f(dev::Device& d) {

 register(d); // Π½Π° самом Π΄Π΅Π»Π΅ это dev::register

}

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

ПослСдним интСрСсным ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, связанным с пространствами ΠΈΠΌΠ΅Π½, являСтся подстановка ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΎΠΊ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… using. Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

namespace mylib {

 void foo(mt);

 void foo(double);

 void foo(std::string);

 // Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ foo( )...

}


// Π’ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅...

using mylib::foo; // Какой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ?

ОбъявлСниС using соотвСтствуСт всСм ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌ foo, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ трСбуСтся. Π”Ρ€ΡƒΠ³ΠΈΠΌ прСимущСством этой записи являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ссли добавляСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° foo, Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄, содСрТащий объявлСниС Π²ΠΈΠ΄Π° mylib::foo, Π²ΠΈΠ΄ΠΈΡ‚ Π΅Π΅ автоматичСски (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π°, содСрТащСго это объявлСниС), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ объявлСниС using Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈ Π΅Π΅.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пространства ΠΈΠΌΠ΅Π½ слСдуСт ΠΎΠ±Π΄ΡƒΠΌΠ°Π½Π½ΠΎ, Π° ΠΈΠ½Π°Ρ‡Π΅ Ρƒ вас ΠΈΠ»ΠΈ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, появятся Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ошибки компиляции. Π’ΠΎΡ‚ нСсколько популярных совСтов ΠΏΠΎ использованию пространств ΠΈΠΌΠ΅Π½.

Как ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ using namespace xxx

Как я объяснял Ρ€Π°Π½Π΅Π΅, ΠΈΠΌΠΏΠΎΡ€Ρ‚ всСго пространства ΠΈΠΌΠ΅Π½ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° ΠΈΠΌΠ΅Π½ β€” Π»ΠΈΠ±ΠΎ сразу, Π»ΠΈΠ±ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ (Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ пространство ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ). Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ сниТаСт ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡƒΡŽ пространствами ΠΈΠΌΠ΅Π½.

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ using Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ большим количСством Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ использованиС пространства ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ· пространства ΠΈΠΌΠ΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌ этот Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». РСшСниС этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½.

НС ΠΏΠΎΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ объявлСния using ΠΈΠ»ΠΈ опрСдСлСния ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ #include

Если это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ using, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ для ΠΊΠΎΠ΄Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ, вСроятно, Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΠ»ΠΎ Π² намСрСния Π°Π²Ρ‚ΠΎΡ€Π° этого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этих ΠΏΡ€Π°Π²ΠΈΠ» использованиС пространств ΠΈΠΌΠ΅Π½ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡ… Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто.