Язык программирования C++. Вводный курс


.Классы как члены пространства имен A


Представленные до сих пор классы определены в области видимости глобального пространства имен. Но их можно определять и в объявленных пользователем пространствах. Имя класса, определенного таким образом, доступно только в области видимости этого пространства, т.е. оно не конфликтует с именами, объявленными в других пространствах имен. Например:

namespace cplusplus_primer {

   class Node { /* ... */ };

}

namespace DisneyFeatureAnimation {

   class Node { /* ... */ };

}

Node *pnode;    // ошибка: Node не видно в глобальной области видимости

// правильно: объявляет nodeObj как объект

// квалифицированного типа DisneyFeatureAnimation::Node

DisneyFeatureAnimation::Node nodeObj;

 

// using-объявление делает Node видимым в глобальной области видимости

using cplusplus_primer::Node;

Node another;    // cplusplus_primer::Node

Как было показано в двух предыдущих разделах, член класса (функция-член, статический член или вложенный класс) может быть определен вне его тела. Если мы реализуем библиотеку и помещаем определения наших классов в объявленное пользователем пространство имен, то где расположить определения членов, находящиеся вне тел своих классов? Их можно разместить либо в пространстве имен, которое содержит определение самого внешнего класса, либо в одном из объемлющих его пространств. Это дает возможность организовать код библиотеки следующим образом:

// --- primer.h ---

namespace cplusplus_primer {

   class List {

   // ...

   private:

      class ListItem {

      public:

         void check_status();

         int action();

         // ...

      };

   };

}

// --- primer.C ---

#include "primer.h"

 

namespace cplusplus_primer {

   // правильно: check_status() определено в том же пространстве имен,

   // что и List

   void List::ListItem::check_status() { }

}

 

// правильно: action() определена в глобальной области видимости

//            в пространстве имен, объемлющем определение класса List

// Имя члена квалифицировано именем пространства

<


Начало  Назад  Вперед



Книжный магазин