c++序列化
时间: 2023-06-29 14:04:34 浏览: 52
C++ 序列化是将对象转换为字节流的过程,这样可以将对象存储到磁盘或网络中,并在需要时重新读取。以下是一个简单的示例:
```c++
#include <iostream>
#include <fstream>
#include <string>
class Person {
public:
Person() = default;
Person(std::string name, int age) : m_name(name), m_age(age) {}
std::string getName() const { return m_name; }
int getAge() const { return m_age; }
friend std::ostream& operator<<(std::ostream& os, const Person& p) {
os << "Name: " << p.m_name << ", Age: " << p.m_age << std::endl;
return os;
}
friend std::istream& operator>>(std::istream& is, Person& p) {
is >> p.m_name >> p.m_age;
return is;
}
private:
std::string m_name;
int m_age;
};
int main() {
// 创建 Person 对象
Person p1("Tom", 30);
// 将对象序列化写入文件
std::ofstream ofs("person.dat", std::ios::binary);
ofs.write(reinterpret_cast<const char*>(&p1), sizeof(p1));
ofs.close();
// 从文件中读取序列化的对象
std::ifstream ifs("person.dat", std::ios::binary);
Person p2;
ifs.read(reinterpret_cast<char*>(&p2), sizeof(p2));
ifs.close();
std::cout << p2;
return 0;
}
```
在这个示例中,我们定义了一个名为 `Person` 的类,它有两个成员变量:姓名和年龄。我们还重载了输入输出运算符,以便我们可以将对象输出到控制台或从控制台读取对象。
在 `main` 函数中,我们首先创建一个 `Person` 对象 `p1`,然后将其序列化写入名为 `person.dat` 的二进制文件中。接下来,我们从文件中读取序列化的对象并将其存储在 `p2` 中。最后,我们将 `p2` 输出到控制台。
请注意,在将对象写入文件时,我们使用了 `reinterpret_cast` 将指向 `Person` 对象的指针转换为 `char` 指针。同样,在从文件读取对象时,我们也使用了 `reinterpret_cast` 将 `char` 指针转换为 `Person` 对象指针。这是因为我们正在处理字节流,而不是对象本身。