C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung 1 zur Lektion "Dynamische Eigenschaften und Objekte"


// Lösung zu dynamischen Daten in Objekten

// Dateien einbinden
#include <iostream>
#include <iomanip>
#include <cstdlib>

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

// Klassendefinition
class Stack
{
    short *pmyStacks;         // Zeiger auf Stack-Objekt
    short stackPtr;           // Stackindex
    short size;               // Stackgrösse
 public:
    Stack(int s=10);                // ctor, Standard-Stackgrösse 10
    ~Stack();                       // dtor
    bool Push(const short val);     // Wert auf Stack ablegen
    bool Pop(short& val);           // Wert vom Stack holen
};
// Definition der Memberfunktionen
// Konstruktor
Stack::Stack(int s)
{
    pmyStacks = new short[s];       // Datenfeld reservieren
    stackPtr = 0;                   // Stackindex initialisieren
    size = s;                       // Grösse merken
}
// Destruktor
Stack::~Stack()
{
    delete [] pmyStacks;             // Datenfeld freigeben
}
// Wert auf Stack ablegen
bool Stack::Push(const short val)
{
    bool retval = false;            // Returncode
    if (stackPtr < size)            // Falls Stack noch nicht voll
    {
        pmyStacks[stackPtr] = val;  // Wert ablegen
        stackPtr++;                 // Stackindex erhöhen
        retval = true;              // OK zurückgeben
    }
    return retval;
}
// Wert vom Stack holen
bool Stack::Pop(short& val)
{
    bool retval = false;            // Returncode
    if (stackPtr>0)                 // Falls noch Werte auf dem Stack
    {
        stackPtr--;                 // Stackindex vermindern
        val = pmyStacks[stackPtr];  // Wert zurückgeben
        retval = true;              // OK zurückgeben
    }
    return retval;
}
// Stack-Objekt definieren
Stack  myStack(5);                  // Stack mit 5 Einträgen anlegen

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

    // Werte auf Stack ablegen
    cout << "Werte auf Stack       : ";
    do
    {
        value = static_cast<short>(rand()%100);
        if (retVal = myStack.Push(value))
            cout << value << ' ';
    } while (retVal);                   // bis Stack voll

    // Werte vom Stack auslesen
    cout << "\nUnd jetzt wieder lesen: ";
    do
    {
        if (retVal = myStack.Pop(value))
            cout << value << ' ';
    } while (retVal);                // bis Stack leer
    cout << endl;

}
// Nach verlassen vom main() wird der dtor des Stacks aufgerufen!