Полное руководство по чтению и записи объектов на C++

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

Методы чтения и записи объектов:

  1. Сериализация:
    Сериализация — это процесс преобразования объекта в поток байтов для его хранения или передачи. C++ предоставляет библиотеку сериализации под названием «Boost.Serialization», которая упрощает этот процесс. Вот пример того, как его использовать:
#include <iostream>
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class MyClass {
public:
    int data;
    // Serialization function
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version) {
        ar & data;
    }
};
int main() {
    MyClass obj;
    obj.data = 42;
    // Writing object to a file
    std::ofstream ofs("object.txt");
    boost::archive::text_oarchive oa(ofs);
    oa << obj;
    ofs.close();
    // Reading object from a file
    std::ifstream ifs("object.txt");
    boost::archive::text_iarchive ia(ifs);
    MyClass newObj;
    ia >> newObj;
    ifs.close();
    std::cout << newObj.data << std::endl;  // Output: 42
    return 0;
}
  1. Ввод-вывод двоичных файлов:
    Вы можете напрямую читать и записывать объекты в двоичные файлы, используя класс std::fstream. Вот пример:
#include <iostream>
#include <fstream>
class MyClass {
public:
    int data;
};
int main() {
    MyClass obj;
    obj.data = 42;
    // Writing object to a binary file
    std::ofstream ofs("object.bin", std::ios::binary);
    ofs.write(reinterpret_cast<char*>(&obj), sizeof(obj));
    ofs.close();
    // Reading object from a binary file
    std::ifstream ifs("object.bin", std::ios::binary);
    MyClass newObj;
    ifs.read(reinterpret_cast<char*>(&newObj), sizeof(newObj));
    ifs.close();
    std::cout << newObj.data << std::endl;  // Output: 42
    return 0;
}
  1. Сериализация JSON:
    Если вы предпочитаете удобочитаемый формат, вы можете использовать библиотеку JSON, например «nlohmann/json», для сериализации объектов. Вот пример:
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
class MyClass {
public:
    int data;
};
int main() {
    MyClass obj;
    obj.data = 42;
    // Writing object to a JSON file
    std::ofstream ofs("object.json");
    nlohmann::json j = obj;
    ofs << j;
    ofs.close();
    // Reading object from a JSON file
    std::ifstream ifs("object.json");
    nlohmann::json loadedJson;
    ifs >> loadedJson;
    MyClass newObj = loadedJson;
    ifs.close();
    std::cout << newObj.data << std::endl;  // Output: 42
    return 0;
}