【问题标题】:Writing object to a file using THIS pointer in c++在 C++ 中使用 THIS 指针将对象写入文件
【发布时间】:2018-04-01 07:04:47
【问题描述】:

所以我有这段代码,其中有一个 Car 类,它有一个名为 save 的成员函数,它使用 THIS 指针将对象保存到文件中。我也有主要功能,在其中我将 Car 对象写入另一个文件,但对象保持不变,但是当在记事本中打开两个保存的文件时,它们似乎不同,为什么??...

 #include <iostream>
#include <fstream>
#include <string>

using namespace std;

class Car
{
private:
  string name;
  int model;
  int numwheels;
public:
  Car()
  {
    name = "No Name";
    model = 0;
    numwheels = 0;
  }
  void save()
  {
    ofstream ofs;

    ofs.open("filename.txt", ios::out | ios::app);
    ofs.write((char*)this, sizeof(this));
  }
};

int main()
{
  Car car;

  //writing object...
  car.save();

  ofstream ofs;

  ofs.open("filename1.txt", ios::out | ios::app);
  ofs.write((char*)&car, sizeof(car));
}

此链接有一个显示结果的图像....

https://i.stack.imgur.com/GAyxu.png

【问题讨论】:

  • 其实我已经找到了问题所在。 sizeof(this) 语句有问题,它返回的是存储对象的指针的大小,但将其更改为 sizeof(Car) 将返回对象的大小...
  • “其实我已经找到问题所在了”你呢?更改 sizeof 的参数不会使任一版本正确。它将用不同的垃圾数据替换垃圾数据。 您不能将write 用于此对象
  • 在 C++ 中寻找序列化。你应该找到很多可以学习的资源。

标签: c++ oop object fstream ofstream


【解决方案1】:

sizeof(this) 是指针Car* 的大小,根据 32 位或 64 位平台为 4 或 8。因此,您输出对象内存的前 4 或 8 个字节,您可以在图像中看到它。要获取对象大小,您应该使用sizeof(*this)sizeof(Car)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多