ot gamehack(25-04-2004)

reiting (-42)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

// Dnes mi triabvashe malko info za imenovanite prostranstva i statiikata mi se stori hubava i kusichka,taka che ia prevedoh naburzo


Vuvedenie

Sled kato e suzdanie na Bjarne Stroustrup, C++ beshe podlozhen na golemi promeni, osobeno prez poslednite godini ot C++ Komiteta po standarti. Niakolko novi vuzmozhnosti biaha dobaveni kum osnovniia ezik, vklyuchitelno templeiti, prihvashtane na izklyucheniia, i razbira se imenovani prostranstva.

Mozhete da si mislite,che imenovanite prostranstva ne vi zasiagat dokato ne gi izpolzvate, no realno ne e taka. Komiteta po standarti na C++ v osnovata si prenapisa Standart Library(Standartnata biblioteka), postaviaiki povecheto ot osnovnite neshta v imenovanoto prostranstvo std. Sama po sebe si tazi promiana nalaga promiana v programite,koito izpolzvat Standartnata biblioteka.
No kakvo tochno e imenovanoto prostranstvo?

Imenovanoto prostranstvo definira nov obseg. CHlenovete v imenovanoto prostranstvo imat obseg v imenovanoto prostranstvo. Te predostaviat nachin da se izbegne koliziiata na imena(na promenlivi, tipove, klasove ili funktsii) bez ogranicheniiata nalagani ot izpolzvaneto na klasove.

Definiraneto na imenovano prostranstvo e podobno na definiraneto na klas. Purvo e dumata za imenovano prostranstvo(namespace), sledvana ot identifikator (imeto na prostranstvoto), sledvano ot deklaratsii zatvoreni v kudravi skobi. Naprimer:


namespace direct {
 class Arrow
 {
 public:
   Arrow(int dir);
   void  setDirection(int dir);
 private:
   int   direction;
 }
 // ...... drugi neshta
}

Imenovanoto prostranstvo obache, ne mozhe da ima spetsifikatori za dostupnost kato public: ili private:. Vsichki chlenove sa publichni.Vazhna razlika mezhdu  klasove i imenovani prostranstva, e che definitsiiata na klasa e zatvorena, koeto oznachava, che vednuzh definirana, novi chlenove ne mogat da budat dobaviani. Definitsiiata na imenovanoto prostranstvo e otvorena, i mozhe da bude razdelena na niakolko chasti. Naprimer:


// fail SY.h
namespace SY {
 class Maker { ... };
 class SuperMaker : public Maker { ... };
}

// fail  data.h
namespace SY {
 class Binder { ... };
 class DataBinder : public Binder { ... };
}

V tozi primer, ima dva faila (SY.h i data.h), i dvete definiraiki imenovanoto prostranstvo SY. Definitsiiata na SY v data.h ne si protivorechi s tazi ot SY.h, a vsushtnost ia razshiriava. Ako poglednete po-podrobno v SB(Standartna Biblioteka), shte zabelezhite, che ne edin heduren fail definira vsichki chlenove na std. Vseki fail samo deklarira niakakvi chlenove, dobaviaiki gi kum globalnoto std imenovano prostranstvo.

Izpolzvane na imenovani prostranstva

Ima chetiri nachina po-koito mozhete da se oburnete kum chlenove na imenovanite prostranstva:
Izpolzvane na pulnoto ime na chlena, vklyuchitelno i prostranstvoto kum koeto prinadlezhi. Naprimer:


 std::cout

Drugiia nachin e definirane na izpolzvanata funktsiia i prostranstvoto kum koeto prinadlezhi s izpolzvane na using:

 using std::cout;
 cout

Tova definira cout kato sinonim na std::cout.
Sledvashtiiat nachin e:


 using namespace std;
 cout
taka mogat da se izpolzvat vsichki chlenove na prostranstvoto std.
S izpolzvaneto na psevdonimi. Primerno:


 namespace X
 {
   namespace Y
   {
     class Z { ... };
   }
 }

Pulnoto nazvanie e Z is X::Y::Z, no mozhem da go dostignem chrez psevdonim


 namespace w = X::Y;
Tova deklarira w kato psevdonim na  X::Y, i taka imame pravoto da dostignem Z izpolzvaiki w::Z.

Zaklyuchenie

Imenovanite prostranstva sa dopulnenie kum veche moshten ezik, davaiki na programista po-goliama guvkavost, v sluchai,che znae kak da se vuzpolzva ot tiah.

Prevodach - gamehack, Avtor - Tomas Restrepo


<< Zashto ne se strahuvame ot virusi? | Problemut softuerni patenti >>