Abstrakte Superklasse aller dynamischen Objekte
Abstrakte Superklasse aller dynamischen Objekte. Dynamische Objekte werden zum Datenaustausch zwischen den und innerhalb der Hauptkomponenten (Deliberator, WorldModel, Sensors, Effectors) eingesetzt.Der Name StorableObject deutet auf eine wesentliche Eigenschaft der Klasse hin: StorableObjects haben einen virtuellen Destruktor und einen "virtuellen Konstruktor". Genauer gesagt, eine virtuelle Methode copy(), die eine Kopie des Objekts auf dem Heap anlegt und einen Zeiger darauf zurückliefert. Da der Name copy bei allen abgeleiteten Klassen gleich ist (im Gegensatz zum Copy-Konstruktor), können in einem Array Zeiger auf Objekte verschiedener Klassen verwaltet werden.
In StorableObject ist copy() eine pure abstract function, d.h. sie muß in der abgeleiteten Klasse überschrieben werden, damit Instanzen der Klasse erzeugt werden können.
Ein StorableObject kann ausserdem einen Beschreibungsstring von sich erzeugen und sich auf einen Stream ausgeben. Zur Erzeugung des Strings dient die Funktion toString(), die ebenfalls pure abstract ist.
Quelltext
[Header | [Implementierung]
CVS Informationen zum Interface
************************************************** * * Aktueller Stand * * $RCSfile: StorableObject.h,v $ * $Revision: 1.8 $ * $Date: 1998/08/14 13:21:21 $ * $Author: myritz $ * **************************************************
Copy ist eine "pure virtual function" (daher das seltsame = 0 im Code), die also von allen Nachkommen ueberschrieben werden muss. Damit sie richtig funktioniert, muß sie von JEDER abgeleiteten Klasse neu überschrieben werden. Hier ein Beispiel für die Klasse Foo:
Foo.h: class Foo : public StorableObject { public: ... virtual StorableObject* copy() const; ... } Foo.c: StorableObject* Foo::copy() const { return new Foo( *this ); }
Am einfachsten kann man das Objekt durch Umleitung nach cout ausgeben.
Die Methode muß in der abgeleiteten Klasse überschrieben werden.
virtual String toString()
Einleitung | Architektur | Dynamische Zusammenhänge | Referenzhandbuch | FAQ | Anhang A | Anhang B
generated by doc++