C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung 2 zur Lektion "Klassen"


// Lösung zu Klassen

// Zuerst Dateien einbinden

#include <iostream>
#include <cstdlib>

using std::cout;
using std::endl;

// Stackgrösse festlegen
const int SSIZE = 10;

// Klassendefinition
class Stack
{
   // Eigenschaften
   short values[SSIZE];    // Feld für Ablage der Werte
   short stackPtr;         // Feldindex (Stackindex)
 public:
   // Schnittstelle
   void Init();            // Stack initialisieren
   bool Push(short val);   // Wert auf Stack ablegen
   bool Pop(short& val);   // Wert vom Stack abholen
};

// Definition der Memberfunktionen
// Stack initialisieren

void Stack::Init()
{
   stackPtr = 0;
}
// Wert auf Stack ablegen
bool Stack::Push(short val)
{
   bool retval = false;    // Returnwert initialisieren
   // Falls Stack noch nicht voll ist
   if (stackPtr != SSIZE)
   {
      // Neuen Wert ablegen
      values[stackPtr] = val;
      stackPtr++;
      // Returnwert auf true setzen
      retval = true;
   }
   return retval;
}
// Wert vom Stack holen
bool Stack::Pop(short& val)
{
   bool retval = false;   // Returnwert initialisieren
   // Falls noch Werte auf dem Stack
   if (stackPtr!=0)
   {
      // Wert vom Stack holen
      stackPtr--;
      val = values[stackPtr];
      // Returnwert auf true setzen
      retval = true;
   }
   return retval;
}

// Stackobjekt definieren
Stack myStack;

// main() Funktion
int main()
{
   bool  retVal;
   short val;

   // Stack initialisieren
   myStack.Init();

   // Stack so lange füllen bis er voll ist
   cout << "Schiebe Werte auf Stack:\n";
   do
   {
      val = std::rand() % 100;
      retVal = myStack.Push(val);
      if (retVal)
         cout << val << ' ';
   } while (retVal);

   // Alle Werte vom Stack wieder holen
   cout << "\nLese Werte vom Stack:\n";
   while (myStack.Pop(val))
   {
      cout << val << ' ';
   }
   cout << endl;
}