Eigene Klasse mit Insert, Delet und Get Funktion Hilfe benötigt



  • Hallo liebe Community,

    zurzeit bin ich an meiner ersten Klasse dran und stoße jetzt schon auf die ersten Probleme. Der Code sieht wiefolgt aus:
    (Erstellt mit Visual Studio 2010)

    #pragma once
    #include <stdlib.h>
    
    ref class ListeEintrag
    {
    private:
    	int MAX;
    	int AktuelleAnzahl;
    	int*Liste;
    
    public:
    	bool Add_Number(int Number);
    	bool Delet_At(int Index);
    	int Get_At(int Index);
    	void Insert_At(int Index);
    	ListeEintrag(int MaxAnzahl);
    	~ListeEintrag();
    };
    	ListeEintrag::ListeEintrag(int MaxAnzahl)
    	{
    		MAX = MaxAnzahl;
    		AktuelleAnzahl = 0
    		Liste = new int[MAX];
    		Liste[MAX] = 0;
    	}
    	ListeEintrag::~ListeEintrag() //Destruktor
    	{
    		delete [] Liste;
    	}
    	bool ListeEintrag::Add_Number(int Number)
    	{
    		if (AktuelleAnzahl < MAX)
    		{
    			Liste[AktuelleAnzahl] = rand;
    			AktuelleAnzahl++;
    			return true;
    		}
    		else
    			return false;
    	}
    	bool ListeEintrag::Delet_at(int Index)
    	{
    	}
    	void ListeEintrag::Get_at(int Index)
    	{
    
    	}
    	void ListeEintrag::Insert_at(int Index)
    	}
    	}
    

    Und zwar habe ich Probleme mit den Funktionen: Get_at, Delet_at und Insert_at.

    Bei Get_at würde ich gerne den Wert einer bestimmen Stelle im Array rausziehen können.

    Bei Delet_at würde ich gerne eine bestimmte Stelle im Array löschen und die restlichen Element nachrücken lassen.

    Bei Insert_at an einer bestimmten Stelle im Array ein Element einfügen und alle Elemente danach aufschieben.

    Ich habe schon alles versucht und komme einfach nicht auf die Lösung...falls mir jemand von euch helfen könnte wäre das super! Aber weiter Versuchen eine Lösung zu finden werde ich auf jeden Fall tun.

    Jetzt schon einmal Danke

    iTron



  • Wenn dir std::list nicht gefällt nimm halt std::vector<int> 😉

    http://www.cplusplus.com/reference/stl/list/
    http://www.cplusplus.com/reference/stl/vector/

    Wenns nur um die Praxis geht, machs zB so: (einfacher und du sparst dir das new / delete ... )

    // #pragma once // das war böse .. warum? bemühe google ;) habs vergessen
    
    #ifndef LISTEEINTRAG_GUARD
    #define  LISTEEINTRAG_GUARD
    
    #include <stdlib.h>
    #include <vector>
    
    class ListeEintrag
    {
    private:
        std::vector<int> Liste;
        int limit;
    
    public:
        bool Add_Number(int Number);
        bool Delet_At(int Index);
        int Get_At(int Index);
        bool Insert_At(int Index, int value);
        ListeEintrag(int MaxAnzahl = 10);
        ~ListeEintrag();
    };
    
    #endif
    
        ListeEintrag::ListeEintrag(int MaxAnzahl) : limit(MaxAnzahl);
        {
        }
    
        ListeEintrag::~ListeEintrag() //Destruktor
        {
        }
    
        bool ListeEintrag::Add_Number(int Number)
        {
            if (Liste.size() == limit) return false;
    
            Liste.push_back(Number);
    
            return true;
        }
    
        bool ListeEintrag::Delet_at(int Index)
        {
            if (index > Liste.size()) return false;
    
            Liste.erase(Liste.begin() + Index);
            return true;
        }
    
        int ListeEintrag::Get_at(int Index)
        {
            return Liste.at(Index); // na dann hoff mal das keiner da einen bösen index reinsetzt
    
        }
    
        bool ListeEintrag::Insert_at(int Index, int value)
        {
             if (! Liste.size() < limit) return false;
             if (Index > Liste.size()) return false;
             Liste.insert(Liste.begin()+Index, value);
        }
    

    Es macht übrigens gar nichts, in Programmen deutsche Bezeicher zu nehmen ... ist mE immer besser als sowas wie Delet_at (wo es doch delete heisst). Abgesehen davon macht es Sinn Listings vorher probe-zu-kompilieren ... dann würde dir Auffallen das deine eine Implementation ein void statt einem int zurückgibt und die letzte Methode } } geklammert ist. Wenn du umbedingt einen eigenes dynamisches Array brauchst ... dann wirst du wohl bei deinen Spezifikationen um ein bisserl umkopieren nicht herumkommen:

    int a[10] = {1,2,3,4,5,6,7,8,9,0};

    mit a[0] greifst du aufs erste Element zu , mit a[9] aufs letzte. Willst du was einfügen, musst du die dahinter jeweils eins weiterkopieren und das eingefügte einfügen. Willst du löschen, das selbe nur andersrum.

    Achja, bin deinem Beispiel gefolgt und habs mal nur runtergeschrieben und nicht kompiliert 😃



  • Hey

    danke schon einmal für die Antworten!
    Würde die Klasse dann so funktionieren?

    #include <stdlib.h>
    
    ref class ListeEintrag
    {
    private:
    	int MAX;
    	int AktuelleAnzahl;
    	int*Liste;
    
    public:
    	bool Add_Number(int Number);
    	bool Delet_At(int Index);
    	int Get_At(int Index);
    	void Insert_At(int Index);
    	ListeEintrag(int MaxAnzahl);
    	~ListeEintrag();
    };
    	ListeEintrag::ListeEintrag(int MaxAnzahl)
    	{
    		MAX = MaxAnzahl;
    		AktuelleAnzahl = 0
    		Liste = new int[MAX];
    		Liste[MAX] = 0;
    	}
    	ListeEintrag::~ListeEintrag() //Destruktor
    	{
    		delete [] Liste;
    	}
    	bool ListeEintrag::Add_Number(int Number)
    	{
    		if (AktuelleAnzahl < MAX)
    		{
    			Liste[AktuelleAnzahl] = rand;
    			AktuelleAnzahl++;
    			return true;
    		}
    		else
    			return false;
    	}
    	bool ListeEintrag::Delete_At(int Index)
    	{
    		if (Index > Liste.size()) return false;		//size - Return Size
            Liste.erase(Liste.begin() + Index);			//erase - Element löschen , begin - Return iterator to beginnin	
            return true; 
    	}
    	void ListeEintrag::Get_At(int Index)
    	{
    		return Liste(Index);
    	}
    	void ListeEintrag::Insert_at(int Index)//einfügen an der stelle
    	{
    		 if (! Liste.size() < limit) return false; 
             if (Index > Liste.size()) return false; 
             Liste.insert(Liste.begin()+Index, value); 
    	}
    

    danke schonmal 😉



  • ...machst du deine Hausaufgaben ohne Compiler oder was?



  • Sehr hilfreiche Antwort danke!
    -.-
    Ne es geht mir um die korrektheit von der Code seite her ob es so verwendet werden kann und nicht ob es funktioniert...



  • iTron schrieb:

    Sehr hilfreiche Antwort danke!

    ...

    Ne es geht mir um die korrektheit von der Code seite her ob es so verwendet werden kann und nicht ob es funktioniert...

    Hehe WTF? Da oben steht als Antwort ein zumindest halbwegs korrekter Code. Das ignorierst du und postest völlig kaputten Code, der noch nicht mal kompiliert. Und willst dann wissen ob man den verwenden kann?

    Dieses Forum ist nicht dein Compiler oder dein Debugger. Wenn du Hilfe bei deinen Hausaufgaben willst, solltest du dir wenigstens ein klein wenig mehr Mühe geben.



  • Viel schlimmer ist eigentlich, dass das kein C++ ist, und deshalb von vornherein nicht kompilieren wird. Stichwort "ref class", sowas gibt es in C++ nicht, bilde mir aber ein, so einen Thread mal gen C++/CLI verschoben gesehen zu haben.



  • Wie schon erwähnt verwende ich das visual studio 2010...daher ich weiß nicht ob die so reines c++ verwenden oder irgendeine eigen kreation hinzufügen.



  • iTron schrieb:

    Hey

    danke schon einmal für die Antworten!
    Würde die Klasse dann so funktionieren?

    Nö.

    Edit1:
    .. weil: Ich benutz std::vector<int> , du int new int[20] . new int[20] kennt kein size() o.ä. das gibts nur bei dem von mir gewählten...
    Edit2:
    benutzt für so ein Vorhaben einfach http://www.cplusplus.com/reference/stl/list/ die können das viel besser als ich und vermutlich auch als du. Dann kannst du einfach die bereitgestellten Methoden benutzen und gut iss...


Log in to reply