Mega Code Archive

 
Categories / C++ / File
 

Serialize object Demo

#include <iostream> #include <fstream> #include <cstring> using namespace std; #define SIZE 40 class Product {   char item[SIZE];    int onhand;         double cost;      public:   Product(char *i, int o, double c)   {     strcpy(item, i);     onhand = o;     cost = c;   }   void store(fstream &stream);   void retrieve(fstream &stream);   friend ostream &operator<<(ostream &stream, Product ob);   friend istream &operator>>(istream &stream, Product &ob); }; ostream &operator<<(ostream &stream, Product ob) {   stream << ob.item << ": " << ob.onhand;   stream << " on hand at $" << ob.cost << '\n';   return stream; } istream &operator>>(istream &stream, Product &ob) {   cout << "Enter item name: ";   stream >> ob.item;   cout << "Enter number on hand: ";   stream >> ob.onhand;   cout << "Enter cost: ";   stream >> ob.cost;   return stream; } void Product::store(fstream &stream) {   stream.write(item, SIZE);   stream.write((char *) &onhand, sizeof(int));   stream.write((char *) &cost, sizeof(double)); } void Product::retrieve(fstream &stream) {   stream.read(item, SIZE);   stream.read((char *) &onhand, sizeof(int));   stream.read((char *) &cost, sizeof(double)); } int main() {   fstream fileStream("fileStream", ios::out | ios::binary);    int i;   Product productObject1("p", 12, 4.95);   Product productObject2("h", 5, 9.45);   Product productObject3("w", 22, 13.90);   Product productObject4("", 0, 0.0);   if(!fileStream) {     cout << "Cannot open file for output.\n";     return 1;   }   // write to file   productObject1.store(fileStream);   productObject2.store(fileStream);   productObject3.store(fileStream);   fileStream.close();   // open for input   fileStream.open("fileStream", ios::in | ios::binary);    if(!fileStream) {     cout << "Cannot open file for input.\n";     return 1;   }   do {     cout << "Record # (-1 to quit): ";     cin >> i;     if(i == -1)         break;     fileStream.seekg(i*(SIZE+sizeof(int)+sizeof(double)), ios::beg);     productObject4.retrieve(fileStream);     cout << productObject4;   } while(fileStream.good());   fileStream.close();   return 0; }