Программирование >>  Инициализация объектов класса, структура 

1 ... 132 133 134 [ 135 ] 136 137 138 ... 395


#include <iostream> const int max = 65000; const int lineLength = 12;

void fibonacci( int max ) {

if ( max < 2 ) return; cout << 0 1 ;

int v1 = 0, v2 = 1, cur;

for ( int ix = 3; ix <= max; ++ix ) { cur = v1 + v2; if ( cur > ::max ) break; cout << cur << ;

vl = v2; v2 = cur;

if (ix % lineLength == 0) cout << end !;

#include <iostream> void fibonacci( int ); int main() {

cout << Числа Фибоначчи: 16\n ; fibonacci( 16 ); return 0;

Так выглядит функция main() , вызывающая fibonacci() :

Результат работы программы:

Числа Фибоначчи: 16

0 1 1 2 3 5 8 13 21 34 55 89

144 233 377 610

8.5.3. Вложенные пространства имен

М1 уже упоминали, что пользовательские пространства имен могут быть вложенными. Такие пространства применяются для дальнейшего структурирования кода нашей библиотеки. Например:



----primer.h----namespace cplusplus primer {

первое вложенное пространство имен: матричная часть библиотеки namespace MatrixLib {

class matrix { /* ... */ }; const double pi = 3.1416;

matrix operators+ ( const matrix &ml, const matrix &m2 ); void inverse( matrix & );

...

второе вложенное пространство имен: зоологическая часть библиотеки namespace AnimalLib {

class ZooAnimal { /* ... */ };

class Bear : public ZooAnimal { /* ... */ };

class Raccoon : public Bear { /* ... */ };

...

Пространство имен cplusplus primer содержит два вложенных: MatrixLib и AnimalLib.

cplusplus primer предотвращает конфликт между именами из нашей библиотеки и именами из глобального пространства вызывающей программы. Вложенность позволяет делить библиотеку на части, в которых сгруппированы связанные друг с другом объявления и определения. MatrixLib содержит сущности, имеющие отношение к классу miatrix, а AnimialLib - к классу ZooAnimial.

Объявление члена вложенного пространства скрыто в этом пространстве. Имя такого члена автоматически дополняется поставленными спереди именами самого внешнего и вложенного пространств.

Например, класс, объявленный во вложенном пространстве MatrixLib, имеет имя

cplusplus primer::MatrixLib::matrix а функция

cplusplus primer::MatrixLib::inverse Программа, использующая члены вложенного пространства

#include primer.h да, это ужасно...

скоро 1л1 рассмотрим механизм!, облегчающие использование членов пространств имен! void func( cplusplus primer::MatrixLib::matrix &m ) {

...

cplusplus primer::MatrixLib::inverse( m ); return m;

cplusplus primer::MatrixLib, выглядит так:



typedef double Type;

namespace cplusplus primer {

typedef int Type; скрает ::Type

namespace MatrixLib { int val;

Type: объявление найдено в cplusplus primer int func(Type t) {

double val; скрывает MatrixLib::val

val = ... ;

...

наконец в глобальной области видимости:

Если некоторая сущность объявляется во вложенном пространстве имен, она скрывает объявление одноименной сущности из объемлющего пространства.

В предыдущем примере имя Type из глобальной области видимости скрыто объявлением Type в пространстве cplusplus primer. При разрешении имени Type, упоминаемого в MatrixLib, оно будет найдено в cplusplus primer, поэтому у функции func() параметр имеет тип int.

Аналогично сущность, объявленная в пространстве имен, скрывается одноименной сущностью из вложенной локальной области видимости. В предыдущем примере имя val из MatrixLib скрыто новым объявлением val. При разрешении имени val внутри func() будет найдено его объявление в локальной области видимости, и потому присваивание в func() относится именно к локальной переменной.

8.5.4. Определение члена пространства имен

Мы видели, что определение члена пространства имен может появиться внутри определения самого пространства. Например, класс matrix и константа pi появляются внутри вложенного пространства имен MatrixLib, а определения функций operator+() и inverse() приводятся где-то в другом месте текста программы:

Вложенное пространство имен является вложенной областью видимости внутри пространства, содержащего его. В процессе разрешения имен вложенные пространства ведут себя так же, как вложенные блоки. Когда некоторое имя употребляется в пространстве имен, поиск его объявление проводится во всех объемлющих пространствах. В следующем примере разрешение имени Type происходит в таком порядке: сначала ищем его в пространстве имен MatrixLib, затем в cplusplus primer и



1 ... 132 133 134 [ 135 ] 136 137 138 ... 395

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