//: C09:Trash.h // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Base class for Trash recycling examples #ifndef TRASH_H #define TRASH_H #include #include #include #include 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 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&) { return false; } virtual void accept(Visitor&) {}; }; #endif // TRASH_H ///:~