Lektion 30:

Konstruktor

 Und jetzt fehlt nur noch eines: Der Wert von topIndex muß beim Erzeugen des Stacks auf -1 (also leerer Stack) gesetzt werden. Dafür ist der Konstruktor da. Ein Konstruktor ist eine Methode, die den gleichen Namen wie die Klasse hat.

   StackAsFixedVector() // Konstruktor
   {
      topIndex=-1;
   };

 Einem Konstruktor kann man keinen return-Typ geben. Deswegen steht kein bool, int oder void davor. Der Konstruktor wird immer aufgerufen, wenn ein Objekt dieser Klasse erzeugt wird. Dadurch wird automatisch garantiert, daß das Attribut topIndex auf einen gültigen Wert gesetzt wurde.

Die fertige Klasse StackAsFixedVector sieht jetzt so aus:

const int STACK_SIZE=5;
class StackAsFixedVector
{
private:
   int data[STACK_SIZE];
   int topIndex;
public:
   StackAsFixedVector() // Konstruktor
   {
      topIndex=-1;
   };
   void push(int i) // ein Element oben drauflegen
   {
      topIndex=topIndex+1;
      data[topIndex]=i;
   };
   int top() // das oberste Element lesen
   {
      return data[topIndex];
   };
   void pop() // das oberste Element entfernen
   {
      topIndex=topIndex-1;
   };
   bool empty() // ist der Stack leer?
   {
      return topIndex==-1;
   };
};

Und wozu verwendet man einen Stack?

Um sich Werte zu merken. Das folgende Programmfragment liest 5 Zahlen ein. Anschließend werden diese Zahlen wieder ausgegeben.

void main()
{
   StackAsFixedVector stack;
   int i;
   for(i=0;i<5;i=i+1)
   {
      int input;
      cin>>input;
      stack.push(input);
   }
   
   while(!stack.empty())
   {
      cout<<stack.top()<<endl;
      stack.pop();
   };
};

Ihnen wird auffallen, daß die Werte in umgekehrter Reihenfolge ausgegeben werden. Wenn die Reihenfolge der Werte unerheblich ist, oder (was manchmal vorkommt) umgekehrt werden soll, dann ist der Stack eine angemessene Datenstruktur dafür.

Einsendungen:

Soll ich Variablen aus dem Block herausziehen?


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