动态对象和文件处理

时间:2011-05-28 02:48:03

标签: c++ object dynamic file-io

我正在做一项需要在C ++中进行文件处理的作业。我坚持如何写,然后回读动态创建的对象。 i-e借助于指向派生类对象的基类指针。我们不知道在任何特定时间存储哪个对象。整个作业足够长,可以在这里发布,但我已经制作了一个类似的简单代码来阐述我的问题。

                    #include <string>
    #include <conio.h>
    #include <iostream>
    #include <vector>
    #include <fstream>

    using namespace std;

    class MAss
    {
    private:

    public:
        int age;
        string name;

        MAss();
        virtual void print();

         friend ofstream & operator << (ofstream & out, MAss & obj);
         friend ifstream & operator >> (ifstream & in, MAss & obj);
    };


    void MAss :: print()
    {
        cout<<endl<<"age = " << age;
        cout<<endl;
        cout<<"name = " <<name;
    }


    MAss :: MAss()
            :age(10)
            , name("Random")
        {}

    ofstream & operator <<  (ofstream & out, MAss & obj)
    {
        out<<obj.age;
        out<<" | " <<obj.name<<endl;
        return out;
    }


    ifstream & operator >> (ifstream & in, MAss & obj)
    {
        string temp;
        in>>obj.age;
        in>>temp;
        in>>obj.name;
        return in;
    }





    class Bass : public MAss
    {
    public:

        int reg;
        Bass();

        void print();

         friend ofstream & operator << (ofstream & out, Bass & obj);
        friend ifstream & operator >> (ifstream & in, Bass & obj);

    };

    Bass ::Bass()
        : reg(1)
    {}


    void Bass :: print()
    {
        MAss ::print();
        cout<<endl<<"REG = " <<reg;
    }

    ofstream& operator<<(ofstream& f, Bass& obj)
    {
        MAss & a = obj;

        f<<obj.reg<<" | ";

        f<<a;
        return f;
    }



    ifstream& operator>>(ifstream& f, Bass& obj)
    {
        string temp;
        MAss & a = obj;

        f>>obj.reg;
        f>> temp;
        f>>a;
        return f;
    }           




        void main ()
        {
            vector <MAss*> b(6);
            cout<<endl<<b.size();
            ofstream o("E:\\A.txt");

            for(int i=0; i<b.size();i++)
                b[i] = new Bass;

            b[0][0].age =1;
            b[0][0].name = "Jack";

            b[1][0].age =2;
            b[1][0].name = "Jill";


            b[2][0].age =3;
            b[2][0].name = "Jane";

            b[3][0].age =1;
            b[3][0].name = "Tom";


            b[4][0].age =2;
            b[4][0].name = "Phill";


            b[5][0].age =3;
            b[5][0].name = "Bone";


            for (int i=0; i<b.size(); i++)
            {
                o << b[i][0];
            }

            o.close();



            ifstream in("E:\\A.txt");
            vector <MAss*> arr;
            while(!in.eof())
            {
                Bass a;
                in >> a;

                a.print();
            }

            arr.pop_back();

            cout<<endl<<arr.size()<<endl;


            for (int i=0; i<arr.size(); i++)
            {
                cout<<endl<<endl<<endl<<endl<<"INDEX : " << i<<endl;
                arr[i][0].print();
            }



            getch();

            in.close();
        }

1 个答案:

答案 0 :(得分:3)

如果要读/写任意对象,您要查找的术语是“对象序列化”。

C++ serialization的答案可以帮到你吗?此外,还有一个关于该主题的C++ FAQ entry小节。