Code for a common collection heirarchy
Class declarations
class Element { /* ... */ };
// ABSTRACT BASE CLASSES
class Iterator {
public: virtual bool hasNext() const = 0;
virtual Element next() = 0;
};
class Collection {
public: virtual Iterator * getIterator() = 0;
};
// CONCRETE DERIVED CLASSES
class ArrayIterator {
public: ArrayIterator(ArrayList& owner);
virtual bool hasNext();
virtual Element next();
};
class ArrayList {
public:
friend class ArrayIterator;
virtual Iterator * getIterator() { return new ArrayIterator(*this); }
};
Usage
Collection * items = new ArrayList();
for (Iterator * i = items->getIterator(); i->hasNext(); ) {
Element e = i->next();
// do stuff
}
// Or:
Collection * stuff = new LinkedList();
for (Iterator * i = stuff->getIterator(); i->hasNext(); ) {
Element e = i->next();
// do stuff
}
Last modified: Thu Jul 20 13:15:49 PDT 2000