序列化在C++中究竟是如何工作的

How exactly serialization works in C++?

本文关键字:工作 何工作 C++ 究竟 序列化      更新时间:2023-10-16

这是我的代码文件:

主.cpp

#include <iostream>
#include <fstream>
#include "Car.h"
#include "Engine.h"
using namespace std;
int main() {
   Car* car = new Car(1984);
   /* do something here */
   delete car;   
   return 0;
}

车.h

#ifndef CAR_H
#define CAR_H
#include <iostream>
using namespace std;
#include "Engine.h"
class Car {
public:
   Car(int);
   virtual ~Car();
   void serialize(ostream& s) {
      engine.serialize(s);
      s << ' ' << yearModel;
   } 
   void unserialize(istream& s) {
      engine.unserialize(s);
      s >> yearModel;
   }
private:
   Engine engine;
   int yearModel;
};
#endif /* CAR_H */

车.cpp

#include "Car.h"
Car::Car(int year) {
   yearModel = year;
}
Car::~Car() {
}

发动机.h

#ifndef ENGINE_H
#define ENGINE_H
#include <iostream>
using namespace std;
class Engine {
public:
   Engine();
   virtual ~Engine();
   void serialize(ostream& s) {
      s << ' ' << engineType;
   } 
   void unserialize(istream& s) {
      s >> engineType;
   }
private:
   int engineType;
};
#endif /* ENGINE_H */

引擎.cpp

#include "Engine.h"
Engine::Engine() {
   engineType = 1;
}
Engine::~Engine() {
}

我主要想做的.cpp是将创建的 Car 对象保存到文件中.txt然后从那里读取它。这究竟是如何工作的?例如:如何调用 Car 类中的序列化函数?

如果我听起来像个菜鸟,我很抱歉,但整个序列化对我来说是很新的。

编辑:当我在所有序列化和反序列化函数前面添加"void"时,代码现在可以编译。

这与序列化无关:函数需要返回类型,即使它是void。所以这是错误的:

serialize(ostream& s) // look, no return type.

您可能需要返回void

void serialize(ostream& s) { /* code as before */ }

或通过引用返回流以允许链接:

ostream& serialize(ostream& s) {
  return s << ' ' << engineType;
}