ot gamehack(25-04-2004)
reiting (-42)
[ dobre ]
[ zle ]
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 >>
|