3

I'm doing an assignment which requires file handling in C++. I am stuck at how to write and then read back dynamically created objects. i-e by the help of a base class pointer which is pointing the derived class object. and we don't know which object is stored there at any particular time. The whole assignment is long enough to be posted here, but i have made a similar simple code to elaborate my question.

                    #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();
        }
slugster
  • 49,403
  • 14
  • 95
  • 145
user773974
  • 31
  • 2
  • P.S: I am trying to simply write to file and read back, and then print in the console window. So that i know that i have the objects in my new variable. – user773974 May 28 '11 at 02:49

1 Answers1

3

If you want to read/write arbitrary objects, the term you are looking for is "object serialization".

Do the answers to C++ serialization help you? Furthermore, there's also a C++ FAQ entry subsection on that topic.

Community
  • 1
  • 1
BjoernD
  • 4,720
  • 27
  • 32