Aufgabe zu Klassen



  • class Punkt()
    {
    public: Punkt ();
    ~Punkt();
    Punkt& operator =(const Punkt &source);
    void setXY( int x, int y);
    int getX ();
    int getY();

    private: int x;
    int y;
    }

    Stimmt das so? :p



  • nein



  • Ist wenigstens etwas richtiges dabei?



  • bisher ja. aber die hälfte fehlt ja noch, und damit meine ich jetzt nicht, dass die methoden nicht implementiert wurden.



  • public: Punkt ()
    { if (x=r) {x=r;y=0} ;
    else if (x=s && y=t){x=s;y=t};
    else {x=0;y=0};
    }

    so?



  • nein. beschäftige dich mal mit überladung von konstruktoren und dem unterschied zwischen zuweisungsoperator und vergleichsoperator.

    oh und im c-unterforum gibt es ein thema namens "[Neu] Syntax Highlighting für C". ich weiß jetzt nicht, warum es im c++-unterforum kein entsprechendes thema gibt, aber das dort geschriebene kannst du super übertragen.



  • class Punkt()
    {
    public: Punkt ();
    		Punkt(int a);
    		Punkt(int a, int b);
    		~Punkt();
    		Punkt& operator =(const Punkt &source);
    		void setXY( int c, int d);
    		int getX ();
    		int getY();
    
    private: int x;
    		 int y;
    } 
    
    Punkt ::Punkt() 
    {		
    	x=0;
    	y=0;
    }
    Punkt ::Punkt(int a)
    {
    	x=0;
    }
    Punkt ::Punkt(int a, int b)
    {
    	x=a;
    	y=b;
    }
    Punkt::~Punkt({}
    
    int Punkt :: getX()
    {
    	return x;
    }
    int Punkt:: getY()
    {
    	return y;
    }
    
    void Punkt::setXY (int c, int d)
    {
    	x=c;
    	y=d;
    }
    

    Wie siehts damit aus? 😕



  • ist das jetzt ein Ratespiel? Mir scheint, du willst so lange herumraten, bis es richtig wird...

    Versuch doch mal, deinen Code mit Warnungen zu kompilieren!

    Dann stellst du fest, dass wir hier immer noch "nein" sagen werden!

    Mindestens folgende Punkte sind falsch:

    1. Punkt(int a) -> Der Parameter a wird nicht genutzt (sollte Warnung ergeben)
      2. Im Destruktor Punkt::~Punkt({} sollte es aufgrund der falschen Klammern einen Fehler geben. Abgesehen davon: wozu brauchst du den Destruktor, wenn der eh nix tut?


  • ja du machst fortschritte. 🙂

    aber wenn du im konstruktor mit einem parameter die werte dieses parameters nicht in die attribute der klasse schreibst, dann werden die werte auch nicht zugewiesen.

    [oberlehrer]und wenn in der aufgabe steht, dass der konstruktor die parameter r oder s und t übernehmen soll, dann sollte er das auch tun. [/oberlehrer]



  • .. ich finde Aufgaben dieser Art fürchterbar!

    Nehmen wir's mal wörtlich:

    PrinzC schrieb:

    1.1 Definieren Sie eine Klasse „Polygon“ ..

    Lösung:

    #include <vector>
    typedef std::vector< Punkt > Polygon;
    

    fertig! erfüllt wirklich alle Anforderungen

    außer vielleicht

    PrinzC schrieb:

    Damit beim Einfügen eines Punktes in das Polygon nicht jedes Mal Speicherplatz neu reserviert werden muss, soll bei Speicherplatzbedarf immer Speicher für 5 Punkte bereit gestellt werden damit die nächsten 4 Einfüge-Operationen keinen Speicherplatz allokieren brauchen. Bei einer neuen Einfüge-Operation wird dann wieder für 5 Punkte Speicherplatz reserviert.
    Implementieren Sie die Funktion zum Einfügen eines Punktes in das Polygon an einer geeigneten Stelle unter Berücksichtigung dieser Strategie des Speichermanagements.
    (Hinweis: Definieren Sie in der Klasse „Polygon“ ein Elementdatum, das angibt, wie viel Speichplatz aktuell reserviert wurde.)

    Dort steht explizit 'Speicherplatz' und nicht 'Anzahl der Punkte im Vector'. Dies und der Rest der Aufgabenstellung zeigt doch wes Geistes Kind das ist. Der Lehrer hat wahrscheinlich vor 30 Jahren mit C angefangen und seither keine Praxis gesehen.

    und

    PrinzC schrieb:

    Schreiben Sie mit Hilfe der Klasse „Polygon“ ein Programm, das ein Rechteck mit der linken unteren Eckkoordinate (0,0) und der rechten oberen Eckkoordinate (1,1) als Polygon enthält.

    Eine Lösung wäre:

    Polygon makeRechteck() {
        return Polygon{ {0,0}, {1,0}, {1,1}, {0,1}, {0,0} };
    }
    

    aber meint hier irgend jemand, dass sich das mit der Erwartungshaltung des Lehrers deckt?

    Gruß
    Werner



  • immerhin hat sich der lehrer (hoffentlich) selbst eine aufgabe ausgedacht.
    mein professor hat sich die aufgaben von anderen hochschulen "ausgeborgt".



  • Werner Salomon schrieb:

    aber meint hier irgend jemand, dass sich das mit der Erwartungshaltung des Lehrers deckt?

    Mit dem vector kannst du das mit dem Reservieren für genau 5 weitere Punkte nicht machen, vec.reserve(n) reserviert ja für >= n und nicht für == n. Somit leider Aufgabe verfehlt, Werner, das gibt eine 6- 😉

    Ich könnte mir aber denken, dass man erst mal selbst sowas machen soll, bevor dann später gelehrt wird, dass es std::vector gibt.

    Was ich ansonsten blöd finde: die 3 Punkt-Konstruktoren. Ich verstehe den ohne Argumente => Ursprung und den mit x,y. Aber wozu soll der mit nur einem Parameter gut sein? Man fragt sich dann leicht, was der genau tut. Und wenn dann noch ein Parameter "r" heißen soll, denke zumindest ich sofort an Polarkoordinaten (wahlweise auch an Zylinder- oder Kugelkoordinaten). Halte ich also für eine schlechte Wahl - warum nicht "x"?



  • class Punkt()
    {
    public: Punkt ();
            Punkt(int a);
            Punkt(int a, int b);
            ~Punkt();
            Punkt& operator =(const Punkt &source);
            void setXY( int c, int d);
            int getX ();
            int getY();
    
    private: int x;
             int y;
    		 int a,b;
    		 int c,d;
    }
    
    Punkt ::Punkt()
    {      
        x=0;
        y=0;
    }
    Punkt ::Punkt(int a)
    {
        x=r;
    	y=0;
    }
    Punkt ::Punkt(int a, int b)
    {
        x=s;
        y=t;
    }
    Punkt::~Punkt(){}
    
    int Punkt :: getX()
    {
        return x;
    }
    int Punkt:: getY()
    {
        return y;
    }
    
    void Punkt::setXY (int c, int d)
    {
        x=c;
        y=d;
    }
    

    Soo, passt das so für Aufgabe 1? 😕
    Oder was genau ist falsch?



  • hast du das programm mal kompiliert? im zweifelsfall mal machen!

    ansonsten fehlen ja noch der kopierkonstruktor und der zuweisungsoperator.



  • OP ist entweder ein Troll oder völlig debil.

    Entweder hörst du auf ihm zu antworten, oder, wenn du ihm unbedingt helfen willst, gibst du ihm die vollständige Lösung.
    Denn aufgrund des einzigen Trauerspiels hier, kannst du getrost davon ausgehen, dass zum Lösen der Aufgabe beim OP einfach der nötige Hirnschmalz fehlt.

    Aber ich tippe eh auf Troll. Sogar die anti Technik Mädels auf der Uni haben die Grundlagen von C erfolgreich erlernt und waren weit davon entfernt, derartig begriffsstutzigen Müll zu produzieren.



  • warum sollte ich die lösung reinstellen?

    [quote=https://de.wikipedia.org/wiki/Troll_%28Netzkultur%29]
    Als Troll bezeichnet man im Netzjargon eine Person, welche Kommunikation im Internet fortwährend und auf destruktive Weise dadurch behindert, dass sie Beiträge verfasst, die sich auf die Provokation anderer Gesprächsteilnehmer beschränken und keinen sachbezogenen und konstruktiven Beitrag zur Diskussion enthalten. Dies erfolgt mit der Motivation, eine Reaktion der anderen Teilnehmer zu erreichen.
    [/quote]

    *hüstel*



  • Ich hab doch erklärt wieso.
    Versuch noch mal zu lesen.


Anmelden zum Antworten