trash.h

来自「Think in C++ 2nd」· C头文件 代码 · 共 57 行

H
57
字号
//: C25:Trash.h

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

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

// (c) Bruce Eckel 1999

// Copyright notice in Copyright.txt

// Base class for Trash recycling examples

#ifndef TRASH_H

#define TRASH_H

#include <iostream>

#include <exception>

#include <vector>

#include <string>



class TypedBin; // For a later example

class Visitor; // For a later example



class Trash {

  double _weight;

  void operator=(const Trash&);

  Trash(const Trash&);

public:

  Trash(double wt) : _weight(wt) {}

  virtual double value() const = 0;

  double weight() const { return _weight; }

  virtual ~Trash() {}

  class Info {

    std::string _id;

    double _data;

  public:

    Info(std::string ident, double dat)

      : _id(ident), _data(dat) {}

    double data() const { return _data; }

    std::string id() const { return _id; }

    friend std::ostream& operator<<(

      std::ostream& os, const Info& info) {

      return os << info._id << ':' << info._data;

    }

  };

protected:

  // Remainder of class provides support for

  // prototyping:

  static std::vector<Trash*> prototypes;

  friend class TrashPrototypeInit;

  Trash() : _weight(0) {}

public:

  static Trash* factory(const Info& info);

  virtual std::string id() = 0;  // type ident

  virtual Trash* clone(const Info&) = 0;

  // Stubs, inserted for later use:

  virtual bool 

  addToBin(std::vector<TypedBin*>&) { 

    return false; 

  }

  virtual void accept(Visitor&) {};

};

#endif // TRASH_H ///:~

⌨️ 快捷键说明

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