⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 persist1.cpp

📁 Think in C++ 第二版源码
💻 CPP
字号:
//: C22:Persist1.cpp

// From Thinking in C++, 2nd Edition

// Available at http://www.BruceEckel.com

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Simple persistence with MI

#include "../require.h"

#include <iostream>

#include <fstream>

using namespace std;



class Persistent {

  int objSize; // Size of stored object

public:

  Persistent(int sz) : objSize(sz) {}

  void write(ostream& out) const {

    out.write((char*)this, objSize);

  }

  void read(istream& in) {

    in.read((char*)this, objSize);

  }

};



class Data {

  float f[3];

public:

  Data(float f0 = 0.0, float f1 = 0.0,

    float f2 = 0.0) {

    f[0] = f0;

    f[1] = f1;

    f[2] = f2;

  }

  void print(const char* msg = "") const {

    if(*msg) cout << msg << "   ";

    for(int i = 0; i < 3; i++)

      cout << "f[" << i << "] = "

           << f[i] << endl;

  }

};



class WData1 : public Persistent, public Data {

public:

  WData1(float f0 = 0.0, float f1 = 0.0,

    float f2 = 0.0) : Data(f0, f1, f2),

    Persistent(sizeof(WData1)) {}

};



class WData2 : public Data, public Persistent {

public:

  WData2(float f0 = 0.0, float f1 = 0.0,

    float f2 = 0.0) : Data(f0, f1, f2),

    Persistent(sizeof(WData2)) {}

};



int main() {

  {

    ofstream f1("f1.dat"), f2("f2.dat");

    assure(f1, "f1.dat"); assure(f2, "f2.dat");

    WData1 d1(1.1, 2.2, 3.3);

    WData2 d2(4.4, 5.5, 6.6);

    d1.print("d1 before storage");

    d2.print("d2 before storage");

    d1.write(f1);

    d2.write(f2);

  } // Closes files

  ifstream f1("f1.dat"), f2("f2.dat");

  assure(f1, "f1.dat"); assure(f2, "f2.dat");

  WData1 d1;

  WData2 d2;

  d1.read(f1);

  d2.read(f2);

  d1.print("d1 after storage");

  d2.print("d2 after storage");

} ///:~

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -