ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Ввод/вывод множества объектов
Предыдущие программы записывали и читали только один объект за раз. В сле-
дующем примере в файл записывается произвольное число объектов. Затем они
считываются, и на экран выводится целиком содержимое файла.
Листинг 12.12. Программа DISKFUN
// diskfun.cpp
// Чтение из файла и запись нескольких объектов
#include <fstream> // для файловых потоков
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class person // класс person
{
protected:
char name[80]; // имя человека
int age; // его возраст
public:
void getData() // получить данные о человеке
{
cout << "\n Введите имя: "; cin >> name;
cout << " Введите возраст: "; cin >> age;
}
void showData() // вывод данных о человеке
Листинг 12.12 (продолжение)
{
cout << "\n Имя: " << name;
cout << "\n Возраст: " << age;
}
};
///////////////////////////////////////////////////////////
int main()
{
char ch;
person pers; // создать объект person
fstream file; // создать входной/выходной файл
// открыть для дозаписи
file.open("GROUP.DAT", ios::app | ios::out |
ios::in | ios::binary );
do // данные от пользователя – в файл
{
cout << "\nВведите данные о человеке:";
pers.getData(); // получить данные
// записать их в файл
file.write( reinterpret_cast<char*>(&pers), sizeof(pers) );
cout << "Продолжить ввод (y/n)? ";
cin >> ch;
}
while(ch=='y'); // выход по 'n'
file.seekg(0); // поставить указатель на начало файла
// считать данные о первом человеке
file.read( reinterpret_cast<char*>(&pers), sizeof(pers) );
while( !file.eof() ) // Выход по EOF
{
cout << "\nПерсона:"; //вывести данные
pers.showData(); //считать данные о следующем
file.read(reinterpret_cast<char*>(&pers),sizeof(pers));
}
cout << endl;
return 0;
}
Покажем пример взаимодействия при работе программы DISKFUN. Предпола-
гается, что она уже запускалась и были введены и записаны в файл данные о
двух персонах.
Введите данные о человеке:
Введите имя:Екатерина
Введите возраст:33
Продолжить ввод (y/n)? n
Персона:
Имя:Татьяна
Возраст:17
Персона:
Имя:Артур
Возраст:60
Персона:
Имя:Екатерина
Возраст:17
В этом примере к файлу добавляется один объект, затем все содержимое, со-
стоящее из трех объектов, выводится на экран.
Класс fstream
До сих пор мы создавали файловые объекты, предназначенные либо для ввода,
либо для вывода. В программе DISKFUN сделана попытка создать файл, который мо-
жет быть использован одновременно как входной и выходной. Это должен быть
объект класса fstream, наследник класса iostream, порожденного классами istream
и ostream, чтобы была возможность поддержки одновременно и ввода, и вывода.
Функция open()
Раньше мы создавали файловый объект и инициализировали его таким выраже-
нием:
ofstream outfile("TEST.TXT");
В программе DISKFUN использован следующий подход: одним выражением
мы создаем файл, а другим его открываем, используя функцию open() (метод
класса fstream). Так полезно делать, когда есть вероятность ошибки при откры-
тии. Можно один раз создать потоковый объект, а затем циклически пытаться
открыть его, не ломая голову над созданием каждый раз нового.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
Схожі підручники
- ЦЕНТРАЛЬНІ БАНКИ В СИСТЕМІ МОНЕТАРНОГО ТА БАНКІВСЬКОГО УПРАВЛІННЯ
- Політична влада
- Фінансові системи зарубіжних країн (частина 1)
- Розділ ІІ (ЗМ 2) Господарство та економічна думка суспільства Європейської цивілізації в період середньовіччя (кінець V – ХV ст.)
- Економічні функції держави в перехідній економіці
- Мне тебя обещали (онлайн)