-2

我想将一个对象写入文件 (*.txt)

class MyCircle{
      double x; 
      double y; 
      double radius;
      char index; 
      int check;}

class Question{
      int index;
      int quantityOfAnswers; 
      MyCircle [] arrCircles; 
      char solution;}

class answersShee{
    int answersSheetID;
    string answersSheetName;
    int quantityOfCandidateID; 
    int quantityOfCodeExamination;
    int quantityOfQuestion;
    Question arrCandidateIDs[quantityOfCandidateID];
    Question arrCodeExaminations[quantityOfCodeExamination]; 
    Question arrQuestions[quantityOfQuestion];}

我想将类答案表写入和读取文件(* .txt),但在 C++ 中没有像在 Java 中那样编写对象:(

4

1 回答 1

0

我真的不明白。互联网上有许多解决方案。搜索“C++ 对象序列化”。

文件中的二进制或文本表示。

在开始将对象写入文件之前,您需要确定是编写二进制表示还是文本表示。

二进制表示反映了平台表示的位和字节。用文本编辑器查看时,数字和其他结构可能不易阅读。这通常是最有效但最不便携的解决方案。指针做得不好,多字节整数也不好(研究“Endianess”或“little endian”)。可变长度字段在二进制字段中需要更多结构(例如长度字段或标记值)。

文本表示是人类可读的形式。文本形式更便于携带,更易于人类阅读。这种形式的读写速度较慢(由于文本格式的翻译)。此外,指针值不采用这种格式(除非您使用数字链接值)。

将文本表示写入文件。

互联网上有大量的例子。我将总结并说此功能通常涉及重载operator <<operator >>. 这意味着向您的类和结构添加功能(或者您可以创建一个独立的功能)。

序列化库

许多人使用这些。我不能推荐或不推荐这些,因为我没有使用过它们。总之,这些库简化了从文件中读取和写入对象的过程。

写入二进制格式

同样,这需要向您的类和结构添加功能(或制作独立功能)。我喜欢扩充使用std::istream::readandstd::ostream::write方法的典型案例。

我使用以下技术:
1. 向每个对象询问该对象在缓冲区中将占据的大小,并对这些值求和。
1.1。这是递归的,每个对象都会询问每个成员的大小。2.为大小
分配一个缓冲区。 3. 将指向缓冲区的指针传递给每个对象,并告诉每个对象将其内容写入缓冲区指针指向的位置(对象将相应地递增指针)。 4. 使用二进制转换将缓冲区作为一个大块写入文件。 5.读法相似,顺序不同。 uint8_t


于 2015-04-21T17:34:31.833 回答