![]() |
|
Программирование >> Расширенная версия языка c++
return 0; Как показано в данной программе, чтобы воспользоваться стандартными потоками ввода и вывода cin и cout, перед именами этих потоков необходимо явно указывать их пространство имен. Если в вашей программе не предусмотрено широкое использование библиотеки языка Standard C++, вы можете не вводить пространство имен std в глобальную область видимости. Однако, если в вашей программе содержатся тысячи ссылок на стандартные библиотечные имена, включить в программу идентификатор std гораздо проще, чем добавлять его чуть ли не к каждой инструкции. 4. Если в своей программе вы используете только несколько имен из стандартной библиотеки, может оказаться удобней с помощью инструкции using отдельно задать эти несколько имен. Преимущество такого подхода в том, что указанные имена можно вносить в программу без необходимости их уточнения, и в то же время не нужно вводить всю стандартную библиотеку в глобальное пространство имен. Рассмотрим пример: Введение в глобальное пространство только нескольких имен #inciude <iostreain> обеспечение тупа к потокам cin и cout , .fji -:.; . . using std:-.cout; using std: :cin; :- double val; . , . .. . области видимости уточнять, что используется пространство имен std. ... . , . ., г. Тем ее, если пожелаете, можете перед каждым идентификатором ставить имя пространства имен std и оператор расширения области видимости -ошибки не будет. Например, в следующей программе библиотека языка Standard C++ не введена в глобальную область видимости. 1.1 : -to Явное задание используемого пространства имен ,ti;-- ir-/i finclude <iostream> ,. int main () , double val; . . std::cout Введите число: .- std; :cin val; std:: cout Вот ваше число: , std: :cout val; cou Введите число: ; ci;val; cou Вот ваше число: cout val; return 0; Здесь стандартными потоками ввода и вывода cin и cout можно пользоваться напрямую, но в то же время остальные имена из пространства имен std оставлены вне текущей области видимости. 5. Ранее уже говорилось, что библиотека исходного языка C++ бхла определена в глобальном пространстве имен. Если вам придется модернизировать старую программу на C++, то вам понадобится либо включить в нее инструкцию using namespace std, либо перед каждой ссылкой на члена библиотеки дописывать имя пространства имен с оператором расширения области видимости std:;. Это особенно важно, если вы замените прежние заголовочные файлы заголовками нового стиж (без расширения .h). Помните, прежние заголовочные файлы размещают свое содержимое в глобальном пространстве имен, а заголовки нового стиля - в пространстве имен std. 6. В языке С, если вы хотите ограничите асть видимости глобального имени только тем файлом, в котором это имя объявлено, вы должны объявить его как статическое, т. е. с идентификатором static. Например, предположим, что следующие два файла являются частью одной программы: Первый файл static int counter; void no { counter = 99; OK Второй файл extern int counter; void f2() { counter = 10; Ошибка > Поскольку переменная counter определена в первое йле, то и использовать ее можно в первом файле. Во втором файле, несмотря на указание в инструкции с переменной counter идентификатора extern, попытка использования этой переменной ведет к ошибке. Объявляя в первом файле переменную counter cTaTwiecKoft, мы ограничиваем ее область видимости этим файлом. Хотя объявления глобальных переменных с идентификатором static в C++ по-прежнему доступны, для достижения той же цели здесь имеется лучший путь - использовать, как показано в следующем примере, безымянное пространство имен. Первый файл namespace { int counter; voil О { counter = 99; OK Второй файл extern int counter; void f 2 0 { counter = 10; Ошибка ) I. Переделайте представленную ниже программу из главы 9 так, чтобы в ней отсутствовала инструкция using namespace std. Превращение пробелов в вертикальные линии : ftinclude <io3tream> . . . - . : . #incLude <fstceem> . = using namespace std; . - f . in t argc, char *argv[]) if(argc!=3) { cout Преобразование <файл ввода> <файл вывода>\п ; return 1; , j л f ifstream fi [1] ) ; открытие файла для ввода ofstream fout (argv[2] ) ; создание файла для вывода , ifdfout) { > . cou Фа открыть невозможно\п ; f- -- - -г-/ return if(!fin) { - cou Файл открыть невозможно\п ; return о. к char ch; fin.unsetf(ios:!skipws) ; не пропускать пробелы whileCfin.eof {)) { fin ch; ii , . if (ch== ) ch = I ; -Л if (Ifin.eofO) fout ch; . fin.close() ; fout,close() ; return Здесь область видимости переменное ntcr также ограничена первым файлом. Использовать безымянное пространство имен вместо ключевого слова static рекомендует новый стандарт Standard C++.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |