【问题标题】:Adding and retrieving object of class from file - C++从文件中添加和检索类的对象 - C++
【发布时间】:2014-01-28 18:30:58
【问题描述】:

我有一些类似的代码;

#include<iostream.h>
#include<string.h>
#include<conio.h>
class MyClass{
  char mystring[10];
  int mynumber;
 public:
  MyClass(){}
  MyClass(char x[],int y){
    strcpy(mystring,x);
    mynumber = y;
  }
  void disp(void){
    cout<<mystring<<" - "<<mynumber;
  }
  void read(void){
    cout<<"enter char and number\n";
    cin>>mystring>>number;
  }
}

int main(){
  Myclass test[10];

  for(int i=0;i<9;i++){
    test[i].read;
    //then store the object into file
  }

  //if user want to display data, then read from file like;
  // string1 - 1234
  // string2 - 3432
  // string9 - 4830

getch();
return 0;

}

我想将一些字符串和关联的号码(如电话簿)存储到一个文件中,例如myfile.txt 作为二进制文件。数据文件可能存储对象 MyClass。如何将信息存储到文件中并从文件中打印整个数据?无需进行文件搜索。

【问题讨论】:

  • 使用 std::string 代替 C 风格的字符串。
  • @ThomasMatthews 你能给我一个完整的答案吗,对不起,我是初学者:(
  • 为什么要介绍一个二进制文件的所有问题?例如,编译器可能会在结构成员之间添加填充,从而破坏关系。此外,ASCII 文本与二进制文本相同,占用相同的空间。
  • 我还能做什么?我只想将类的对象存储到文件中并从那里检索信息。其他的可能性是什么?我想在这里实现 write(),这就是为什么..

标签: c++ file file-io


【解决方案1】:

更喜欢使用std::string

class Phone_Entry
{
  std::string name;
  std::string phone_number;
};

在写入和读取文件时,您应该让对象执行 I/O。 此外,由于字符串的长度不同(也称为可变大小记录),您需要先写入长度然后写入文本,或者写入带有结束标记的文本。

让我们假设姓名在一条线路上,电话号码在另一条线路上:

class Phone_Entry
{
  // as above
  friend std::ostream& operator<<(std::ostream& out, const Phone_Entry& pe);
  friend std::istream& operator>>(std::istream& inp, Phone_Entry& pe);
};

std::ostream&
operator<<(std::ostream& out, const Phone_Entry& pe)
{
  out << pe.name << "\n";
  out << pe.number << "\n";
  return out;
}

std::istream&
operator>>(std::istream& inp, Phone_Entry& pe)
{
  std::getline(inp, pe.name);
  std::getline(inp, pe.number);
}

现在您可以使用operator&gt;&gt; 从文件中读取您的条目:

std::ifstream phone_book_file("phone_book.txt");
Phone_Entry entry;
phone_book_file >> entry;

同样的输出:

cout << entry;

阅读 C++ FAQ(在网上搜索 C++ FAQ)会让您受益匪浅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多