Программирование >>  Расширенная версия языка c++ 

1 ... 125 126 127 [ 128 ] 129 130 131 ... 227


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++.



1 ... 125 126 127 [ 128 ] 129 130 131 ... 227

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