stack problem



  • hi,
    also erstmal im voraus: ich bin noch ein einsteiger in sachen c++.
    ich habe folgendes programm zum austesten von stacks geschrieben.

    #include <iostream>
    
    using namespace std;
    
    class tKnoten
    {
    public:
            int Daten;
            tKnoten *Naechster;
    };
    
    class tStack
    {
    public:
            tStack();
            ~tStack();
            void Rauf(int Daten);
            int Runter();
    
    private:
            tKnoten *Anker;
    };
    
    tStack::tStack()
    {
        Anker = 0;
    }
    
    tStack::~tStack()
    {
        tKnoten *Letzter;
    
        while(Anker)
        {
            Letzter = Anker;
            Anker = Anker->Naechster;
            delete Letzter;
        }
    }
    
    void tStack::Rauf(int Daten)
    {
        tKnoten *Knoten = new tKnoten;
        Knoten->Daten = Daten;
        Knoten->Naechster = Anker;
        Anker = Knoten;
    }
    
    int tStack::Runter()
    {
        int Inhalt = 0;
    
        if(Anker)
        {
            tKnoten *Alt = Anker;
            Anker = Anker->Naechster;
            Inhalt = Alt->Daten;
            delete Alt;
        }
        return Inhalt;
    }
    
    int main()
    {
        tStack *Stack;
    
        Stack->Rauf(12);
        Stack->Rauf(32);
        Stack->Rauf(18);
    
        cout << Stack->Runter() << endl;
        cout << Stack->Runter() << endl;
        cout << Stack->Runter() << endl;
        cout << Stack->Runter() << endl;
    
        system("pause");
    }
    

    hier wird komischerweise bei der ausführung des codes beim 4. aufruf von Stack->Runter() eine zahl ungleich 0 zurückgegeben. wieso? und warum funktionert es so wie es soll wenn ich statt einen zeiger auf tStack, ein objekt dieser klasse definiere? 😕

    mich würde auch mal gerne interessieren ob und was an meinen programmier-stil auszusetzen/verbessern gibt. was ich mir da vorstellen könnte ist das ich eigentlich alle namen auf deutsch gewählt habe und nicht auf englisch oder ein teil englisch und der andere deutsch (außer stack, das wort kenn ich aber auch schon viel länger so als das wort stapel) weil ich nur in einer sprache programmieren will, entweder deutsch oder englisch, sonst kommt man zu schnell durcheinander



  • Nur mal kurz überflogen:

    // entweder
    tStack *Stack = new tStack;
    // oder
    tStack Stack;
    

    Dass es in deinem Code nicht kracht ist quasi Zufall, du legst keine Instanz an.

    Ach ja, wie unterscheidest du zwischen "leererStack->Runter()" und "stack->Rauf(0); stack->Runter()"?





  • ach ja, ok thx

    is mir auch grad aufgefallen. ich schätz mal das kann man am besten mit einer bool in der klasse tStack regeln die wenn der stack leer is false ist und wenn noch was drin ist true oder?



  • stack_jetzt_versteher schrieb:

    ich schätz mal das kann man am besten mit einer bool in der klasse tStack regeln die wenn der stack leer is false ist und wenn noch was drin ist true oder?

    man nimmt eher behauptungen (assert) oder ausnahmen (throw exception) und lässt das programm dadurch mit absicht so abstürzen, dass auf den fehler und seine position hingewiesen wird


Anmelden zum Antworten