Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Zaochniki / 08_ns

.pdf
Скачиваний:
9
Добавлен:
13.02.2016
Размер:
247.17 Кб
Скачать

Неименованные (безымянные) пространства им¼н

Сокрытие реализации на уровне файла

Ôàéë mylib.h

namespace

{

// безымянное пространство им¼н

c l a s s A

{

} ;

void f u n x x ( ) ;

i n t

z z z ;

 

 

} ;

 

 

 

// < здесь

неявно срабатывает u s i n g namespace

A : : A( )

 

 

 

{}

 

 

 

void f u n x x ( )

 

 

 

 

 

{

 

 

 

z z z

= 0 ;

 

 

}

 

 

 

 

 

 

 

 

 

 

 

За пределами этого файла имена A , funxx , zzz не видны.

Пространства им¼н

Свойства пространств им¼н

Отличия от классов

Пространства им¼н открыты

В отличие от классов, в пространствах им¼н нет модификаторов public, private, protected. Все имена из именованных пространств им¼н пространств им¼н доступны снаружи.

Пространства им¼н пополняемы

В любой момент пространство им¼н можно пополнить новыми определениями.

namespace A {

i n t x ;

} ;

namespace A {

i n t y ;

} ;

Пространства им¼н

Псевдонимы пространств им¼н

Использование коротких им¼н вместо длинных

Для избежания конфликта им¼н среди самих пространств им¼н желательно использовать длинные имена. Пользоваться длинными именами неудобно.

namespace my_lovely_graph_lib_v20 { c l a s s Window { } ; / . . . . . . . /

} ;

namespace MGL = my_lovely_graph_lib_v20 ;

//теперь вместо my_lovely_graph_lib_v20

//можно использовать MGL

MGL : : Window w ;

Нельзя пополнять пространства им¼н, используя псевдонимы.

Пространства им¼н

Преимущества и недостатки пространств им¼н

Недостатки

потребовался новый синтаксис языка; язык стал сложнее в изучении.

Преимущества

имена в программе можно разделить на области применения;

если не конфликта им¼н, при помощи using можно использовать короткую форму записи;

при необходимости конфликт им¼н разрешается явно;

можно использовать для сокрытия реализации, не находящейся в классе;

пользователь контролирует, каким образом используются имена в программе.

Пространства им¼н

Пространства им¼н и библиотеки

Во избежание конфликта им¼н современные библиотеки C++ помещаются в собственные пространства им¼н.

Стандартная библиотека C++ находится в пространстве им¼нstd .

Для совместимости в языком C, стандартная библиотека C++ состоит из двух частей:

старая часть, которая практически совпадает со стандартной библиотекой языка С. Доступны такие функции как printf, open, sin, . . .

современной, объектно-ориентированной и шаблонной части.

Пространства им¼н

Стандартная библиотека C++

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

Современная часть библиотеки C++ может использоваться только через пространство им¼н std .

#i n c l u d e

<i o s t r e a m > // включение заголовка

#i n c l u d e <s t r i n g >

void

f ( )

 

 

{

 

 

 

s t d : : s t r i n g

s = "ABCDE" ;

s t d : : cout << s << s t d : : e n d l ;

}

 

 

 

 

 

using

namespace s t d ;

void g ( )

 

 

{

 

 

 

s t r i n g

s =

"ABCDE" ;

 

 

 

 

cout << s << e n d l ;

}

Пространства им¼н

Стандартная библиотека C++

Использование унаследованной части (1)

Унаследованная часть библиотеки C++ может использоваться так, как использовалась в языке С. При этом включаются привычные заголовочные файлы, и импорт им¼н из std происходит автоматически.

#i n c l u d e <s t d i o . h> #i n c l u d e < s t r i n g . h>

void f ( )

{

const char s = "ABCDE" ;

i n t i = s t r l e n ( s ) ;

p r i n t f ( " s= %s , i= %d\n" , s , i ) ;

}

Пространства им¼н

Стандартная библиотека C++

Использование унаследованной части (2)

Унаследованная часть библиотеки C++ может использоваться так же, как и современная. При этом от имени заголовочного файла отбрасывается суффикс .h и добавляется префикс c .

#i n c l u d e

<c s t d i o >

#i n c l u d e

<c s t r i n g >

void f ( )

 

 

{

 

 

const char s

= "ABCDE" ;

 

i n t i = s t d : : s t r l e n ( s ) ;

 

s t d : : p r i n t f (

" s= %s , i= %d\n" ,

s , i ) ;

}

 

 

using namespace

s t d ;

 

void g ( )

 

 

{

 

 

const char s

= "ABCDE" ;

 

i n t i = s t r l e n ( s ) ;

 

p r i n t f ( " s= %s , i= %d\n" , s , i

) ;

}

 

 

 

 

 

Пространства им¼н

Соседние файлы в папке Zaochniki