Doppelt verkettete Liste



  • Hi,

    Ich versuche gerade mein Theoretisches Wissen über C++ in die Praxis umzusetzen mithilfe einer doppelt verketteten Liste. Ich werde diesen Thread benutzen und verschiedene Fragen reinposten damit ich nicht immer wieder einen neuen aufmachen muss. Ich denke es werden verschiedenste Fragen werden, da meine Programmierkenntnisse noch sehr dürftig sind.

    Der Aufbau meiner Liste soll wie folgt aussehen: Ich habe die Klasse Element, welche u.a. einen Pointer auf das nächste und auf das vorherige Element enthält. Desweiteren die Klasse ListManager, in der u.a. Zeiger auf das erste und letzte Element in der Liste zeigt.

    Meine erste Frage: Ich möchte jeder Instanz einer Klasse eine fortlaufende Nummer (im Bsp: identifier) geben, die ich später ausgeben lassen kann. Mein Ansatz sieht wie folgt aus:

    class Element
    {
    private:
    	Element* next;
    	Element* back;
    	[b]static int identifier;[/b]
    
    public:
    	Element (void);	
    	~Element (void);
    	Element* getnext (){return next;}
    	Element* getback (){return back;}
    	static int getidentifier () {return identifier;}
    	void setnext (Element* pnext) {next=pnext;}
    	void setback (Element* pback) {back=pback;}
    	void show (Element*);};
    
    int Element::identifier=0;
    Element::Element():next(NULL),back(NULL){Element::identifier++;}
    

    Jetzt frag ich mich ob diese Lösung gut ist. Gibt es eine elegantere Lösung mein oben beschriebenes Problem zu lösen?

    mfg und danke!



  • Die Variable darf nicht statisch sein (im Element).

    Gruß



  • theliquidwave schrieb:

    Die Variable darf nicht statisch sein (im Element).

    Gruß

    OK, und warum?



  • raised.fist schrieb:

    theliquidwave schrieb:

    Die Variable darf nicht statisch sein (im Element).

    OK, und warum?

    Lies nach, wofür static in diesem Kontext gut ist, und Du wirst es verstehen. Wenn Du die Erklärung zu static in Deinem C++ Buch nicht verstehst, kannst Du ja nochmal um Hilfe fragen. Bis dahin: Streng Dich mal ein bissel mehr an.

    kk



  • Wenn man Instanzen zählen will, dann ist dieses vorgehen genau richtig.

    #include <iostream>
    
    class Test
    {
    private:
    	static int number;
    
    public:
    	Test()
    	{
    		number++;
    	}
    
    private:
    	Test(const Test& rhs);
    	Test& operator=(const Test& rhs);
    
    public:
    	static int getNumber() { return number; }
    };
    
    int Test::number = 0;
    
    int main()
    {
    	Test a, b, c, d, e;
    
    	std::cout << Test::getNumber() << std::endl;
    }
    

    Aber wozu brauchst du das bei der Liste? Eventuell ist das in dem Fall nicht sinnvoll.



  • krümelkacker schrieb:

    raised.fist schrieb:

    theliquidwave schrieb:

    Die Variable darf nicht statisch sein (im Element).

    OK, und warum?

    Lies nach, wofür static in diesem Kontext gut ist, und Du wirst es verstehen. Wenn Du die Erklärung zu static in Deinem C++ Buch nicht verstehst, kannst Du ja nochmal um Hilfe fragen. Bis dahin: Streng Dich mal ein bissel mehr an.

    kk

    http://www1.xup.in/exec/ximg.php?fid=10381180

    Das ist ein Screenshot aus dem ebook, und dort steht genau das drin, was ich auch gepostet habe am anfang. Ich verstehe es nicht, warum soll beides richtig/falsch sein?



  • Wie gesagt, das ist auch vollkommen korrekt. Hat das ganze denn noch einen tieferen Sinn, oder ist es einfach nur Interesse? Es ist einfach so, dass ich das bei einer solchen Liste noch nie benötigt habe.



  • Statische Klassenmember gibt's nur einmal. Im ganzen Programm.
    Bei dir benötigt aber jeder Knoten eine ID.

    Deswegen: identifier darf nicht static sein, dafür führst du ein statisches nextIdentifier ein und im Konstruktor schreibst du identifier=nextIdentifier++;


Anmelden zum Antworten