В C++ объекты являются фундаментальным аспектом объектно-ориентированного программирования. Возможность чтения и записи объектов имеет решающее значение для многих приложений. В этой статье мы рассмотрим различные методы и приемы чтения и записи объектов на C++, а также приведем примеры кода, иллюстрирующие каждый подход.
Методы чтения и записи объектов:
- Сериализация:
Сериализация — это процесс преобразования объекта в поток байтов для его хранения или передачи. 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;
}
- Ввод-вывод двоичных файлов:
Вы можете напрямую читать и записывать объекты в двоичные файлы, используя класс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;
}
- Сериализация 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;
}