使用fstream将类对象写入文件,然后读取它

时间:2013-06-08 15:30:52

标签: c++ oop fstream

我想创建一个学生班级并获取3个输入信息并输出该文件。怎么样?这是我的尝试:

#include <iostream>
using namespace std;
class Student{
  private:
    char name[50];
    char id[50];
    int age;
  public:
    void getdata()
    {
        //take name as input
        //take id as input
        //take age as input
    }
    void showdata()
    {
         //display stored file
    }
 }

int main()
{
    Student s1;
    ofstream s1("student.txt");      //i want to store that 's1' object
    //anything else
    return 0;
}

2 个答案:

答案 0 :(得分:4)

C ++使用流范例来实现标准输入/输出。

流范例意味着如果应用程序想要访问/使用资源(文件,控制台等),则流充当应用程序和资源之间的中介:

                     ofstream       +----+
              +-------------------->|File|
              |                     +----+
              |
       +------+------+
       | Application |
       +------+------+
              |
              |                     +-------+
              +-------------------->|Console|
                        cout        +-------+

这意味着您执行的每个写入/读取操作都是流操作。这一点就是流操作基本相同,与您使用的资源类型(以及什么类型的流)无关。

这允许我们实现“通用”(通用含义对任何类型的流/资源都有效)。怎么样? 重载C ++运算符&gt;&gt;和&lt;&lt;

对于输入操作(输入意味着从流中接收数据并将其放入我们的变量/对象中),我们需要重载&gt;&gt;运算符如下:

istream& operator>>(istream& is , MyClass& object)
{
    is >> object.myClassAtributte; (1)
    ... //Same for every attribute of your class.

    return is;
}

首先,请注意输入流是通过引用传递的。通过引用,因为流是不可复制的(复制流的确切意思是什么?复制你的应用程序和资源之间的链接?这听起来很荒谬),非const因为你要修改流(你要写通过它。)

最后,请注意函数不返回void,返回对传递给函数的同一个流的引用。这允许你编写像cout << "Hello. " << "Im" << " Manu343726" << endl;

这样的连续写/读句子

对于输出操作(输出意味着将数据发送到流),我们需要重载&lt;&lt;运算符,其实现完全相同:

ostream& operator<<(ostream& os , const MyClass& object)
{
    os << object.myClassAtributte; (1)
    ... //Same for every attribute of your class.

    return os;
}

请注意,在这种情况下,您的对象是传递给const的,因为我们不会修改它(我们只会读取它的属性)。

(1)最好实现此功能,使其成为您班级的朋友,以允许我们访问私人/受保护的成员。

答案 1 :(得分:0)

您需要重载<<>>

ostreamistream运算符
std::ostream& operator<< (std::ostream& stream, const Student& student)
std::istream& operator<< (std::istream& stream, Student& student)

让他们成为朋友并实施