Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функции стандартного ввода.docx
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
538.07 Кб
Скачать

9.2.2 Ввод/вывод с использованием разных классов

Как, мы определили, что поточные классы — это поставщики инструментов для работы с файлами.

В поточных классах хранятся:

  • структуры, обеспечивающие открытие/закрытие файлов;

  • функции (методы) открытия/закрытия файлов;

  • другие функции и данные, обеспечивающие, как мы увидим далее, собственно ввод/вывод.

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

Многие серьезные приложения состоят из нескольких программных файлов (с исходным текстом программ), которые создаются и обслуживаются отдельными группами программистов. И только после этого все файлы собираются в общий проект. Но как быть с тем фактом, что в таких файлах могут быть одинаково объявлены некоторые разные переменные? В C++ это неудобство разрешается с помощью так называемых пространств имен, которые вводятся в каждый составляющий единый проект текстовый программный файл с помощью директивы:

Namespace <имя пространства имен (идентификатор)> {в эти скобки заключается весь программный текст}

Когда идет сборка общего проекта, то в итоговом тексте пишут директиву:

using namespace:: идентификатор пространства имен;

Это обеспечивает в итоговом проекте доступ к переменным файла с данным пространством имен. При использовании поточных классов языка C++ в основной программе требуется писать директиву:

using namespace::std;

В противном случае программа не пройдет компиляцию. В листинге 9.9 приводится пример использования директив пространства имен, результат работы программы показан на рис. 9.7.

Листинг 9.9

// З7.срр : Defines the entry point for the console application.

#include "stdafx.h"

#include <iostream>

#include <conio.h>

namespace F

{

float x = 9;

}

namespace G

{

using namespace F; /*здесь само пространство G использует пространство F и в нем же объявляется еще одно пространство: INNER_G*/

float у = 2.0;

namespace INNER_G

{

float z = 10.01;

}

} //G

int _tmain()

{

using namespace G; /*эта директива позволяет пользоваться всем, объявленным в "G"*/

using namespace G::INNER_G; /*эта директива позволяет пользоваться всем, объявленным только в "INNER_G"*/

float x = 19.1; /*локальное объявление переопределяет предыдущее*/

std::cout << "х = " << х << std::endl;

std::cout << "у = " << у << std::endl; /* у берется из пространства F*/

std::cout << "z = " << z << std::endl; /* z берется из пространства INNER_G*/

_getch();

}

/*Результат:

x = 19.1

y=2

z=10.1

*/

Рис. 9.7. Результат работы программы листинга 9.9

std::cout — это стандартный вывод. Его мы рассмотрим чуть позже. Здесь показано, что объект cout принадлежит пространству имен std. Мы могли I бы в основной программе записать:

using namespace::std;

Тогда бы вместо std:: cout можно было бы писать просто cout.

Итак, при составлении программы с использованием поточных файлов в начале основной программы следует записать директиву:

using namespace std;