Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Extern int func1 (); //объявление функции, определенной в файлеf22.cpp




Extern double func2 (); //объявление функции, определенной в файлеf22.cpp

int main () {

cout << "main m=" << m << " " << func1 () << endl; // 10 4
cout << x << " " << func2 () << endl; // 100.56 102.56

return 0; }

Файл f22.cpp

int m=2; // определение в файле глобальной переменной m

Extern double x; // объявление переменной х, определенной в файлеf12.cpp //extern int i, например, даст ошибку, т.к. iне определено в файлеf12.cpp

int func1 () { return m * m; } // определение функции, m=2

double func2 () { return x + m; } // определение функции m=2; x=100.56

 

 
 

 


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

При написании больших и сложных программ (например, библиотек классов) возможен выбор программистом имен, которые на практике придут в противоречие с аналогичными именами, выбранными другими разработчиками классов в их библиотеках. Чтобы избежать этого используются длинные имена, что усложняет восприятие программы.

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

В С++ имеется возможность использовать пространство имен,рекомендуемое новым стандартом языка. Пространство имен – область программы, в которой распознается определенная совокупность имен, которые неизвестны за пределами этого пространства имен.

Ключевое слово namespace путем объявления именованных областей позволяет разделить глобальное пространство имен и определяет область видимости. Стандартная библиотека С++ объявляется теперь не в глобальном пространстве имен, как было раньше, а в собственном пространстве std.

Директива using namespace std; означает, что все определенные ниже в программе имена будут относиться к пространству имен с именем std.

Определение пространства имен:

Namespace geo

{

int m = 10; //объявление глобальной переменной m в пространстве имен geo,

}

 

int geo :: n; //объявление глобальной переменной n также в пространстве имен geo,

 

Все, что определено внутри инструкции namespace ( переменные, функции),находится внутри области видимости данного пространства имен, поэтому к идентификаторам, объявленным в этом пространстве имен, можно обращаться напрямую.

При обращении извне пространства имен к объектам, объявленным внутри этого пространства, следует указывать оператор расширения области видимости::.

Чтобы упростить запись идентификаторов, используется инструкция using, имеющая две формы:

using namespace имя;

using имя :: член;

 

При использовании первой формы инструкции using namespace имя; все члены, определенные в этом пространстве имен, становятся доступными в текущем пространстве и с ними можно работать напрямую, без указания имени пространства и оператора расширения области видимости. Пространство имен становится видимым от точки написания директивы. Область действия директивы можно сузить до блока, используя ее, например, в функции.

При использовании второй формы инструкции using имя::член; видимым делается только указанный член пространства имен.

 

Безымянное пространство имен позволяет создавать идентификаторы, являющиеся уникальными внутри некоторого файла (пространству имен присваивается имя файла). К членам этого пространства можно обращаться напрямую, без уточнений. Вне файла эти идентификаторы неизвестны.

 

Файл f13.cpp

#include <iostream.h>

namespace { //определение глобальной переменной m в безымянном пространстве имен,

int m = 10; } //т.е. переменная m доступна только в файле f13.cpp

double x = 100.56; //определение глобальной переменной в глобальном пространстве имен
extern int func1 (); //объявление функции, определенной в файле f23.cpp

extern double func2 (); //объявление функции, определенной в файле f23.cpp

int main () {

cout << "main m=" << m << " " << func1() << endl; // 10 4

cout << x << " " << func2() << endl; // 100.56 102.56

return 0;

}

Файл f23.cpp

int m=2; //определение глобальной переменной m, доступной только в этом файле

extern double x; //объявление переменной, определенной в файле f13.cpp

int func1 () { return m * m; } //определение функции, m=2 из этого файла

double func2 () { return x + m; } //определение функции, m=2 из этого файла
// х – из файла f13.cpp

 

 





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 695 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2510 - | 2325 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.