|
Программирование >> Инициализация объектов класса, структура
#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 и
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |