Программирование >>  Дополнительные возможности наследования 

1 ... 174 175 176 [ 177 ] 178 179 180 ... 265


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

headerl.h namespace Window {

void move( int x, int y) ;

heador2.h namespace Window {

void resie( int x, ml у ) ;

Объявление u определение типов

Внутри пространства имен можно объявлять и определять типы и функции. Тут не обойтись без обсуждения стратегических подходов программирования в С++. Правильность структуры программы определяется тем, насколько четко отделен интерфейс программы от ее процедурной части. Этому принципу необходимо следовать не только при работе с классами, но и при создании пространств имен. Ниже показан пример плохо структурированного пространства имен;

namespace Window {

II... другие обьявления и определения переменных, void move( int х, int у) ; ибъявл1!ния void rosize( mt x, int у ) ;

II . . . другие обьяплении и определения переменных.

void move( mt х, int у ) {

if( X < HAX SCREEN X & , x > О )

lf( у < MAX SCREEN Y && у > 0 )

platform.move( x, у ) ; специальная программа

void resize( int x, int у ) {

if( X < MAX SIZE X && X > 0 )

if( у < MAX SIZE Y && у > 0 )

platform, resize( x, у ) : специальная программа

II... продолжение определений

Наглядно видно, как быстро пространство имен становится хаотичным и беспорядочным! Причем в этом примере объявление пространства имен составляло всего около 20 строк, а во что превратилась бы программа, будь объявление более длинным?



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

файл header.h namespace Window {

void move( int x, int y) ;

другие объявления

file impl.cpp

void Window::move( int x, int у ) {

код перемещения окна

Добавление новых члвнвв

Добавление новых членов в пространство имен осуществляет только в теле пространства. Невозможно создавать новые члены пространства имен вне тела пространства, указывая его имя, как это делалось с объектами классов. Компилятор ответит на это сообщением об ошибке. Пример такой ошибки показан ниже.

namespace Window { ряд объявлений

код программы

int Window. ;newIntegerInNamespace ; ошибка

Последняя строка неправильна, и компилятор сообщит об этом. Чтобы исправить ошибку, перенесите объявление переменной-члена newIntegerlnNamespace в тело пространства имен.

Все заключенные в пространстве имени члены являются открытыми. Поэтому неправильным будет и следующий код:

namespace Window { private:

void move( int x, int у ) ;

Одно пространство имен можно вложить в другое пространство имен. К подобному вложению прибегают в том случае, когда определение выполнения одного пространства имен должно содержать объявление нового пространства. Чтобы обратиться

847985

39�84142



к члену внутреннего пространства имен, необходимо явно указать имена обоих пространств. Так, в следующем примере одно именованное пространство объявляется внутри другого именованного пространства;

namespace Window { namespace Pane {

void size( int x, int у ) ;

Для доступа к функции size() за пределами пространства имен Window нужно дополнить имя вызываемой функции именами пространств имен, внутри которых она была объявлена, например:

int main( ) {

Window::Pane::size( 10, 20 ) ; return 0 ;

Теперь рассмотрим пример использования пространства имен и связанного с ним оператора видимости. Сначала внутри пространства имен Window объявляются все типы и функции, после чего за его пределами следуют определения функций-членов. Чтобы определить функцию, объявленную в пространстве имен, следует перед именем функции установить имя пространства имен и оператор видимости, как это делается в листинге 17.1.

Аистииг 17.1. Испояьзоваиие иространства имен

1: ftinclude <iostream> 2:

3: namespace Window 4: {

5: const int MAX X = 30 ; 6: const int MAX Y = 40 ; 7; class Pane {

public:

PaneO ; PaneO ;

void size( int x, int у ) void move( int x, int у ) void show( ) ; private:

static int cnt ; int x ; int у ;

10 11 12 13 14 15 16 17 18 19 20

14493895



1 ... 174 175 176 [ 177 ] 178 179 180 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика