Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен по информатике.docx
Скачиваний:
39
Добавлен:
22.09.2019
Размер:
1.18 Mб
Скачать

Потоковый ввод/вывод пользовательских типов.

к началу статьи Хоть стандартные потоки и позволяют выводить только встроенные типы, эту проблему можно с легкостью обойти. Надо просто для класса, который мы хотим выводить в поток, определить дружественный оператор <<, у которого первый параметр и возвращаемое значение – поток, второй параметр - объект данного класса:

include &ltiostream.h> include &ltconio.h> class cVector{ public: float x,y; cVector( void ){x=1;y=2;} friend ostream &operator<<( ostream& , cVector & ); }; ostream &operator<<( ostream & ostr , cVector &v ){ cout<<"x:"<<v.x<<endl; cout<<"y:"<<v.y<<endl; return( ostr ); } int main( void ){ cVector v; cout<<v<<endl; getch(); return 0; }

Файловый ввод/вывод.

к началу статьи Работа с файловыми потоками практически ничем не отличается от работы с любым другим потоком. Как всегда есть класс входного потока – ifstream, есть класс выходного потока – ofstream (на самом деле есть ещё универсальный файловый поток ввода/вывода - fstream). Для открытия потока используется метод open(), в который передаются путь к файлу и режим. Например:

ifstream istr; istr.open( “file.txt” , ios::binary );

В этом примере мы открыли файл file.txt в двоичном режиме (по умолчанию все файлы открываются в текстовом режиме), вот так:

ifstream istr; istr.open( “file.txt” );

Надеюсь Вы не забыли подключить файл fstream.h? Теперь рассмотрим основные методы для работы с файловыми потоками: close() – закрытие потока. eof() – возвращает true, если был достигнут конец файла. get(char) – читает символ из файла put(char) – записывает символ в файл read( char *str , int size ) – читает буфер str длиной size из файла write( char *str , int size ) – записывает буфер str длиной size в файл seekg( int offset , seekdir ) – устанавливает смещение указателя считывания в зависимости от seekdir. seekp( int offset , seekdir ) – устанавливает смещение указателя считывания в зависимости от seekdir. seekdir может принимать значения ios::beg, ios::cur, ios::end. Таким образом что бы передвинуть указатель считывания в конец файла, а затем снова в начало нужно сделать следующее:

ifstr.seekg( 0 , ios::end ); //смещение от конца = 0, //переходим в конец файла ifstr.seekg( 0 , ios::cur ); //смещение от текущего положения = 0, //соответственно просто топчемся на месте ifstr.seekg( 0 , ios::beg ); //смещение от начала = 0, //соответственно переходим в начало файла

tellg() – позиция указателя считывания. tellp() – позиция указателя записи.

Вот пожалуй все, что я хотел рассказать о потоках ввода/вывода, и самое грустное, что это, наверное, последняя статья по С++ :(. Самая простая часть Вашего пути позади – синтаксис усвоен, осталось только научиться эффективно его использовать. Но вместо точки хочу поставить жирное многоточие – наверное мы с Вами встретимся на уроках по Java’e а может быть я организую несколько уроков по C :) Мы только в начале нашего великого пути!