Listing 4: Simple subject and observer classes

class Subject;

class Observer {
public:
   Observer();
   virtual ~Observer();
   virtual void 
   Update(Subject *changedSubject)=0;
};

class Subject {
   std::list<Observer *> observers;
public:
   Subject();
   virtual ~Subject();
   virtual void Attach(Observer *obs);
   virtual void Detach(Observer *obs);
   virtual void Notify();
};