от gamehack(25-04-2004)

рейтинг (-39) [ добре ] [ зле ]

Printer Friendly Вариант за отпечатване

// Днес ми трябваше малко инфо за именованите пространства и статийката ми се стори хубава и късичка,така че я преведох набързо


Въведение

След като е създание на Bjarne Stroustrup, C++ беше подложен на големи промени, особено през последните години от C++ Комитета по стандарти. Няколко нови възможности бяха добавени към основния език, включително темплейти, прихващане на изключения, и разбира се именовани пространства.

Можете да си мислите,че именованите пространства не ви засягат докато не ги използвате, но реално не е така. Комитета по стандарти на C++ в основата си пренаписа Standart Library(Стандартната библиотека), поставяйки повечето от основните неща в именованото пространство std. Сама по себе си тази промяна налага промяна в програмите,които използват Стандартната библиотека. Но какво точно е именованото пространство?

Именованото пространство дефинира нов обсег. Членовете в именованото пространство имат обсег в именованото пространство. Те предоставят начин да се избегне колизията на имена(на променливи, типове, класове или функции) без ограниченията налагани от използването на класове.

Дефинирането на именовано пространство е подобно на дефинирането на клас. Първо е думата за именовано пространство(namespace), следвана от идентификатор (името на пространството), следвано от декларации затворени в къдрави скоби. Например:


namespace direct {

class Arrow
{
public:
  Arrow(int dir);
  void  setDirection(int dir);
private:
  int   direction;
}
// ...... други неща

}

Именованото пространство обаче, не може да има спецификатори за достъпност като public: или private:. Всички членове са публични.Важна разлика между класове и именовани пространства, е че дефиницията на класа е затворена, което означава, че веднъж дефинирана, нови членове не могат да бъдат добавяни. Дефиницията на именованото пространство е отворена, и може да бъде разделена на няколко части. Например:


// файл SY.h namespace SY {

class Maker { ... };
class SuperMaker : public Maker { ... };

}

// файл data.h namespace SY {

class Binder { ... };
class DataBinder : public Binder { ... };

}

В този пример, има два файла (SY.h и data.h), и двете дефинирайки именованото пространство SY. Дефиницията на SY в data.h не си противоречи с тази от SY.h, а всъщност я разширява. Ако погледнете по-подробно в СБ(Стандартна Библиотека), ще забележите, че не един хедърен файл дефинира всички членове на std. Всеки файл само декларира някакви членове, добавяйки ги към глобалното std именовано пространство.

Използване на именовани пространства

Има четири начина по-който можете да се обърнете към членове на именованите пространства: Използване на пълното име на члена, включително и пространството към което принадлежи. Например:


std::cout

Другия начин е дефиниране на използваната функция и пространството към което принадлежи с използване на using:

using std::cout;
cout

Това дефинира cout като синоним на std::cout. Следващият начин е:


using namespace std;
cout

така могат да се използват всички членове на пространството std. С използването на псевдоними. Примерно:


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

Пълното название е Z is X::Y::Z, но можем да го достигнем чрез псевдоним


namespace w = X::Y;

Това декларира w като псевдоним на X::Y, и така имаме правото да достигнем Z използвайки w::Z.

Заключение

Именованите пространства са допълнение към вече мощен език, давайки на програмиста по-голяма гъвкавост, в случай,че знае как да се възползва от тях.

Преводач - gamehack, Автор - Tomas Restrepo