Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
38
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

Задачи 197-198. Конструктор копирования

  1. Добавьте в класс Bivect методы для вычисления длины вектора, угла между двумя векторами. Перегрузите оператор вызова функции () для вычисления скалярного произведения двух векторов. Пример перегрузки оператора () есть в программе 64.

  2. Разработайте класс Polinom для работы с многочленами вида от одной переменной x. Предусмотрите в классе конструктор копирования, оператор присваивания, операторы для выполнения алгебраических действий над многочленами. Перегрузите оператор вызова функции double operator()(double x) для вычисления значения многочлена по заданному аргументу x. Включите в класс функцию рисования графика многочлена на заданном интервале изменения переменной x

Глава 19.Ввод и вывод

Язык C++ не содержит встроенных средств ввода и вывода. Ввод и вывод обеспечивается стандартной библиотекой с заголовочным файлом iostream.h или iostream. При использовании iostream нужно использовать пространство имен std. В C++ можно применять все средства ввода и вывода языка Си, которые становятся доступными после включения в программу заголовочного файла stdio.h.

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

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

istream  –  класс входных потоков;

ostream  –  класс выходных потоков.

iostream –  класс двунаправленных потоков.

19.1.Вывод

В классе ostream есть функции-операторы << для вывода стандартных типов. В качестве результата данные функции возвращают ссылку на объект, для которого вызываются. Ниже приводится фрагмент объявления класса ostream.

class ostream: public ios

{

...

public:

ostream& operator<<(char*); // Вывод строки

ostream& operator<< (int); // Вывод целого

ostream& operator<< (long); // Вывод длинного целого

ostream& operator<< (double); // Вывод double

ostream& operator<< (long double); // Вывод long double

ostream& put(char); // Вывод символа

};

Реализация некоторых простых функций вывода выполнена непосредственно в классе, например, функция вывода целого int:

inline ostream& ostream::operator<< (int _i)

{ return *this << (long) _i; }

Видно, что int преобразуется к типу long, затем используется оператор для вывода long и возвращается поток *this, в который произведен вывод. Реализация оператора вывода long в классе не приводится, она содержится в заранее откомпилированной библиотеке.

В файле iostream объявлен объект cout класса ostream, связанный по умолчанию со стандартным выходным устройством (дисплеем), – стандартный выходной поток. Как уже говорилось, его можно перенаправить на файл средствами операционной системы.

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

Для вывода сообщений об ошибках определен объект cerr, всегда связанный со стандартным выходным устройством. Он не имеет буфера, то есть сообщение, направленное в cerr, немедленно появится на экране.

Благодаря тому, что функция operator << возвращает ссылку на поток, можно писать цепочки вызовов вида:

double x=3.14;

cout << "\nx=" << x;

Последняя инструкции является сокращенной записью инструкции:

cout.operator<<("\nx=").operator<<(x);

Первым вычисляется выражение cout.operator<<("\nx="). При его вычислении выводится строка "\nx=", значением этого выражения является cout. Затем в cout выводится x.