Serialize object Demo : Object Serialize « File « C++






Serialize object Demo

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;
}


           
       








Related examples in the same category

1.Save and read class back and forth to a fileSave and read class back and forth to a file