ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 12) онлайн
Объектный ввод/вывод
Так как C++ — это все-таки объектно-ориентированный язык, было бы интересно
узнать, как происходит запись объектов в дисковые файлы и чтение из них. Сле-
дующий пример демонстрирует этот процесс. Класс person, использовавшийся ра-
нее в нескольких наших программах (например, в VIRTPERS, глава 11, раздел «Вир-
туальные функции»), создает объекты, с которыми мы сейчас будем работать.
Запись объекта на диск
При записи объекта мы обычно используем бинарный режим. При этом на диск
записывается та же битовая конфигурация, что хранится в памяти. Это придает
уверенности в том, что данные объекта будут обработаны корректно. В приводи-
мой ниже программе OPERS у пользователя запрашивается информация об объек-
те класса person, который потом записывается в файл PERSON.DAT.
Листинг 12.10. Программа OPERS
// opers.cpp
// Сохранение объекта в файле
#include <fstream> // для файловых потоков
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class person // класс person
{
protected:
char name[80]; // имя человека
short age; // возраст
public:
void getData() // получить данные о человеке
{
cout << "Введите имя: "; cin >> name;
cout << "Введите возраст: "; cin >> age;
}
};
///////////////////////////////////////////////////////////
int main()
{
person pers; // создать объект
pers.getData(); // получить данные
// создать объект ofstream
ofstream outfile("PERSON.DAT", ios::binary);
// записать в него
outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers));
return 0;
}
Метод getData() класса person вызывается для того, чтобы запросить у поль-
зователя информацию, которая помещается в объект pers. Вот простой пример
взаимодействия:
Введите имя: Артур
Введите возраст: 60
Содержимое данного объекта записывается на диск с помощью функции write().
Для нахождения длины данных объекта pers используется оператор sizeof.
Чтение объекта с диска
Для чтения пригодится метод read(), что продемонстрировано в следующем лис-
тинге.
Листинг 12.11. Программа IPERS
// ipers.cpp
// Чтение объекта из файла
#include <fstream> // для файловых потоков
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class person // класс person
{
protected:
char name[80]; // Имя человека
short age; // его возраст
public:
void showData() // вывести данные
{
cout << "Имя: " << name << endl;
cout << "Возраст: " << age << endl;
}
};
///////////////////////////////////////////////////////////
int main()
{
person pers; // переменная типа person
ifstream infile("PERSON.DAT", ios::binary);// создать поток
// чтение потока
infile.read( reinterpret_cast<char*>(&pers), sizeof(pers));
pers.showData(); // вывести данные
return 0;
}
В результате работы программы будет выведено на экран все то, что было
помещено в файл PERSON.DAT программой OPERS:
Имя: Артур
Возраст: 60
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
Схожі підручники
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
- Бухгалтерський фінансовий облік (частина 2)
- Загальні питання з курсу Українська мова
- Соціологія Навчально-методичний посібник для студентів всіх напрямків (частина 1)
- ГРОШІ І КРЕДИТ (частина 2)
- ПИТАННЯ З КУРСУ «ВВЕДЕННЯ У ФІНАНСОВУ ДІЯЛЬНІСТЬ»