Wenn fertig, bitte Fenster schließen
// 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! |