Программирование >>  Инициализация объектов класса, структура 

1 ... 337 338 339 [ 340 ] 341 342 343 ... 395


(a) void operate( double ); void operate( string ); void operate( const Base & );

Derived *pd = new Derived;

(b) void calc( int ); void calc( double ); void calc( const Derived & );

Base *pb = new Derived;

operate( *pd );

operate( *pb );

20. Библиотека iostream

Частью стандартной библиотеки C++ является библиотека iostream - объектно-ориентированная иерархия классов, где используется и множественное, и виртуальное наследование. В ней реализована поддержка для файлового ввода/вывода данных встроенн1х типов. Кроме того, разработчики классов могут расширять эту библиотеку для чтения и записи новых типов данных.

Для использования библиотеки iostream в программе необходимо включить заголовочный файл

#include <iostream>

Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostreami, является производным от них и поддерживает двунаправленный ввод/вывод. Для удобства в библиотеке определены три стандартных объекта-потока:

cin - объект класса istreami, соответствующий стандартному вводу. В общем случае он позволяет читать данные с терминала пользователя;

cout - объект класса ostreami, соответствующий стандартному выводу. В общем случае он позволяет выводить данные на терминал пользователя;

cerr - объект класса ostream, соответствующий стандартному выводу для ошибок. В этот поток мы направляем сообщения об ошибках программы.

Вывод осуществляется, как правило, с помощью перегруженного оператора сдвига влево (<<), а ввод - с помощью оператора сдвига вправо (>>):



#include <iostream> #include <string>

int main() {

string in string;

льзователя пожалуйста: ;

вывести литерал на терминал пол cout << Введите свое имя, пожалуй

прочитать ответ пользователя в in string cin >> in string;

if ( in string.empty() )

вывести сообщение об ошибке на терминал пользователя cerr << ошибка: введенная строка пуста!\n ;

else cout << Привет, << in string << !\n ;

Назначение операторов легче запомнить, если считать, что каждый указывает в сторону перемещения данных. Например,

>> x

перемещает данные в x, а

перемещает данные из x. (В разделе 20.1 мы покажем, как библиотека iostream поддерживает ввод данных, а в разделе 20.5 - как расширить ее для ввода данных новых типов. Аналогично раздел 20.2 посвящен поддержке вывода, а раздел 20.4 - расширению для вывода данных определенных пользователем типов.)

Помимо чтения с терминала и записи на него, библиотека iostream поддерживает чтение и запись в файлы. Для этого предназначены следующие классы:

ifstreami, производный от istreami, связывает ввод программа: с файлом;

ofstreami, производный от ostreami, связывает вывод программа: с файлом;

fstreami, производн1й от iostreami, связывает как ввод, так и вывод программы с файлом.

Чтобы использовать часть библиотеки iostream, связанную с файловым вводом/выводом, необходимо включить в программу заголовочный файл

#include <fstream>

(Файл fstream уже включает iostreami, так что включать оба файла необязательно.) Файловый ввод/вывод поддерживается теми же операторами:

<< x



#include <fstream> #include <string> #include <vector> #include <algorithm> int main() {

string ifile;

cout << Введите имя файла для сортировки: ; cin >> ifile;

сконструировать объект класса ifstream для ввода из файла ifstream infile( ifile.c str() );

if ( ! infile ) {

cerr << ошибка: не могу открыть входной файл:

<< ifile << endl; return -1;

string ofile = ifile + .sort ;

сконструировать объект класса ofstream для вывода в файл ofstream outfile( ofile.c str() );

if ( ! outfile) {

cerr << ошибка: не могу открыть выходной файл:

<< ofile << endl; return -2;

string buffer;

vector< string, allocator > text; int cnt = 1;

while ( infile >> buffer ) {

text.push back ( buffer );

cout << buffer << (cnt++ % 8 ? : \n );

sort( text.begin(), text.end() );

водим отсортированное множество слов в файл

ctor< string >::iterator iter = text beginO;

( cnt = 1; iter

outfile << *iter

(cnt % 8 ? : \n );

vector< string >::iterator iter = text.begin(); for ( cnt = 1; iter != text.end(); ++iter, ++cnt ) outfile << *iter

return 0;

Вот пример сеанса работы с этой программой. Нас просят ввести файл для сортировки. Mi набираем alice emma (набранные на клавиатуре символы напечатаны полужирным шрифтом). Затем программа направляет на стандартный вывод все, что прочитала из файла:

Введите имя файла для сортировки: alice ea Alice Ea has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he tells her, magical but untamed. Daddy, shush, there



1 ... 337 338 339 [ 340 ] 341 342 343 ... 395

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