Konstruktoren probleme



  • hallo,
    ich beschäftige mich gerade mit Konstruktoren und habe sehr große Probleme damit. Folgendes Problem habe ich: ich will eine klasse Pfad die einen weg darstellt. Der Weg sollt aus beliebig vielen Wegpunkten bestehen. Die Punkte sollen nur aus x und y Koordinaten bestehen. Die Klasse Punkt hab ich mal so definiert:

    class Punkt :
    
    {
    	int x; // X-Koordinate
    	int y; // Y-Koordinate
    public:
    	Punkt(int x = 0, int y = 0){ x = x; y = y; }
    
    	void print(){ cout << ' ( ' << x << ' , ' << y << ' ) '; }
    
    };
    

    Nun stellt sich mir aber die Frage wie der Konstruktor, der die
    Anzahl der Punkte als Parameter hat aussehen soll?
    kann mir da jemand einen Tipp geben?

    Außerdem verstehe ich nicht wie eine Methode mit der man die Wegpunkte der Reihe nach in den Pfad einfügen kann realisiert werden könnte 😡
    Konstruktoren sind so schlecht beschrieben in meinem Buch 😮
    Vielen Dank schon mal an alle die mir Konstruktoren irgendwie verständlicher machen können 👍 👍



  • Ein Punkt ist doch kein Pfad! Warum leitest du davon ab?

    Vielleicht solltest du dir ein besseres Buch kaufen. Die Suchfunktion liefert dir sicher Hinweise.



  • "public Pfad" upps das sollte da nicht hin 😮

    ich durchsuche das Forum gerade 😃



  • { x = x; y = y; }
    

    das macht sicherlich nicht das richtige. Such mal nach "Initialisierungsliste"...



  • Kleine Bitte: Wenn man Code in das Forum kopiert, sollte man Tabulatoren durch Leerzeichen ersetzten.

    class Punkt : // <-- Erster Fehler der Doppelpunkt am Ende
    {
        int x; // X-Koordinate
        int y; // Y-Koordinate
    public:
        Punkt(int x = 0, int y = 0) // <-- Hier definierst du lokale Variablen
        {
            x = x; // <-- Selbstzuweisung (lokale V. an lokale V.)
            y = y; //     Lokale Variablen haben Vorrang vor Membern.
        }
    
        // Entweder (auch besser)
        Punkt(int x = 0, int y = 0)
        : x(x), y(y) // Hier steht der Member vor der Klammer, in der Klammer der
        {}           // Initialwert (lokale Variable) [Initialisierungsliste]
    
        // Oder
        Punkt(int x = 0, int y = 0)
        {
            this->x = x; // Mittels this-Zeiger wird explizit die Membervariable
            this->y = y; // angesprochen. Im Gegensatz zur Initialisierungsliste
            // handelt es sich hierbei aber nicht um eine Initialisierung, sondern
            // eine nachträgliche Zuweisung (Bei Objekten wäre schon vorher der
            // Standardkonstruktor aufgerufen wurden, und nun zusätzlich der
            // Zuweisungsoperator)
        }
    //...
    


  • asc schrieb:

    Kleine Bitte: Wenn man Code in das Forum kopiert, sollte man Tabulatoren durch Leerzeichen ersetzten.

    Bloss nicht.



  • Danke asc für deine ausführliche Erklärung!



  • also ich komme schon wieder nicht weiter. Ich hoffe mir kann jemand einen Lösungsansatz vorschlagen 😞 ich schreibe zu Anfang nochmal meine gesamte Aufgabenstellen:

    Definieren Sie eine Klasse mit Namen Pfad, die einen Weg darstellt. Ein Weg besteht aus einer beliebigen Anzahl von Punkten(die klasse Punkt haben wir jetzt schon 🙂 ), die durch (x,y)-Koordinaten repräsentiert werden.

    Vorgehen soll ich wie folgt:

    Beschreiben Sie die Klassen in C++. Defnieren Sie zunächst einen Konstruktor, der die Anzahl der Punkte als Parameter besitzt.

    dazu habe ich ganz einfach nur einen Konstruktor mit einem Parameter gemacht:
    Kritik bitte sofort äußern 😃

    class Pfad
    {
    	int anzahlpunkte;
    
    public:
    	Pfad(int a = 0){ anzahlpunkte = a; }
    
    };
    

    Schreiben Sie außerdem eine weitere Methode insertKoord(Punkt& p), mit der Sie die Wegpunkte der Reihe nach in den Pfad einfügen können,

    hier frage ich mich erstmal in welche Datei diese Funktion rein muss. ich tippe auf pfad.h außerdem komme ich mit dem "Punkt& p" Copykonstruktor nicht ganz klar und frage mich auch wie das mit der Reihe nach umsetzbar sein soll. Die einzige Lösung die mir einfällt wäre einfach ein Stack indem die punkte sind? Bitte helft mir dabei 😕

    sowie eine Methode printKoord(int i), mit der Sie den i-ten Wegpunkt auf Konsole ausgeben können.

    Über den wert den i hat gebe ich den entsprechenden Wegpunkt aus, dass ist mir klar aber wie greife auf das zu?

    **
    Schreiben Sie ein kleines Hauptprogramm, mit dem Sie Ihre Klassen testen können.**

    Das sollte zum Schluss kein Problem mehr sein 😃

    Hier noch meine Punkt.h

    Punkt.h:

    class Punkt
    
    {
    	int x; // X-Koordinate
    	int y; // Y-Koordinate
    public:
    	Punkt(int x = 0, int y = 0)
    		: x(x), y(y)
    	{}
    
    	void print(){ cout << ' ( ' << x << ' , ' << y << ' ) '<< endl; }
    
    };
    

    Wenn noch jemand fragen hat ich beantworte alle Fragen so schnell wie es geht!
    vielen dank für alle die mir versuchen zu helfen!!



  • Der einfachste Weg ist es, einen std::vector oder std::array (falls C++11) zu benutzen, der deine Punkte enthält:

    #include <vector>
    
    #include "Punkt.h"
    
    class Pfad
    {
       std::vector<Punkt> Punkte_;
    
    public:
       Pfad( unsigned int Length ) :
          Punkte_( Length )
       {
       }
    };
    

    Alles weitere kannst du der Doku zu vector/array entnehmen.

    Edit:
    std::vector mit fester Anzahl von Wegpunkten ist mit dieser Aufgabenstellung Käse. std::vector wächst bei Bedarf selbständig mit und braucht keine maximale Wegpunktzahl.
    Ich denke, dein Lehrer/Prof will auf manuelle Speicherverwaltung (und all ihren Tücken) hinaus und wird std::vector wohl nicht akzeptieren. Oder er ist einer von den Leuten, die C mit Klassen für C++ halten.
    Wie gesagt, die sauberste Lösung ist std::vector , und wenn dein Lehrer/Prof das nicht sehen will musst du dich wohl selbst um die Speicherverwaltung kümmern.



  • DocShoe schrieb:

    Der einfachste Weg ist es, einen std::vector oder std::array (falls C++11) zu benutzen, der deine Punkte enthält:

    Die Aufgabenstellung klingt für mich eher so, als wäre ein C-Array gefordert (Anzahl der Punkte dem Konstruktor übergeben).

    @andymaxi was genau ist das für eine Aufgabe? Schule/Uni? Darfst du sowas wie std::vector benutzen?



  • ich denke auch dass hier ein Array gefordert ist. 😉
    das ist ne Aufgabenstellung von einer FH


Anmelden zum Antworten