Lektion 58:

Template-Klassen

 Das Erzeugen von Template-Klassen ist ebenso einfach, wie das Erzeugen von Template-Funktionen. Template-Klassen sind sehr praktisch, wenn es darum geht, Containerklassen, wie StackAsVector etc. zu schreiben.

const int STACK_SIZE=5;

template<class T>
class StackAsVector
{
private:
   T *data;
   int topIndex;
public:
   StackAsVector(int size) // Konstruktor
   {
      data=new T[size];
      topIndex=-1;
   };
   void push(T i) // ein Element oben drauflegen
   {
      assert(topIndex<STACK_SIZE-1);
      topIndex=topIndex+1;
      data[topIndex]=i;
   };
   T top() // das oberste Element lesen
   {
      return data[topIndex];
   };
   void pop() // das oberste Element entfernen
   {
      assert(topIndex>-1);
      topIndex=topIndex-1;
   };
   bool empty() // ist der Stack leer?
   {
      return topIndex==-1;
   };
};

Beachten Sie auch hier wieder, wie einfach es war, die bereits vorhandene Klasse StackAsVector in eine Template-Klasse umzuwandeln.

Bei der Verwendung solch einer Template-Klasse müssen Sie aber explizit angeben, welchen Typ Sie verwenden wollen. Es stehen dem Compiler ja keine Funktionsargumente zur Verfügung, an denen er es selbständig erkennen könnte.

   StackAsVector<string> stack(5);

 Auch Template-Klassen aus anderen Übersetzungseinheiten können nicht verwendet werden!

Es ist natürlich auch möglich, einem Template mehrere Typ-Variablen zu übergeben. Eine schöne Anwendung dafür folgt in den nächsten Lektionen.



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00