Noob braucht Hilfe T_T
-
Hi alle zusammen,
brauche wieder eure Hilfe um zu verstehen wie das abläuft. Kommentare im Code und am Ende Fragen über Fragen.
Kurze Erläuterung über den Code:
Es handelt sich um einen Rechteck, der mittels 2 Punkten im Koordinatensystem (X-Y-Achse) eine Gerade bildet. 8 Punkte werden also benötigt um 4 Geraden zu bilden und somit einen Rechteck zusammezufügen.Folgender Quellcode:
#include <iostream> using namespace std; class Point { public: void SetX(int x) { itsX = x; } void SetY(int y) { itsY = y; } int GetX()const { return itsX;} int GetY()const { return itsY;} private: int itsX; int itsY; }; class Rectangle { public: Rectangle (int top, int left, int bottom, int right); ~Rectangle () {} int GetTop() const { return itsTop; } int GetLeft() const { return itsLeft; } int GetBottom() const { return itsBottom; } int GetRight() const { return itsRight; } Point GetUpperLeft() const { return itsUpperLeft; } // Wie wird Point Point GetLowerLeft() const { return itsLowerLeft; } // zusammengefügt Point GetUpperRight() const { return itsUpperRight; } // mit Rectangle? Point GetLowerRight() const { return itsLowerRight; } void SetUpperLeft(Point Location) {itsUpperLeft = Location;} void SetLowerLeft(Point Location) {itsLowerLeft = Location;} void SetUpperRight(Point Location) {itsUpperRight = Location;} void SetLowerRight(Point Location) {itsLowerRight = Location;} void SetTop(int top) { itsTop = top; } void SetLeft (int left) { itsLeft = left; } void SetBottom (int bottom) { itsBottom = bottom; } void SetRight (int right) { itsRight = right; } int GetArea() const; private: Point itsUpperLeft; Point itsUpperRight; Point itsLowerLeft; Point itsLowerRight; int itsTop; int itsLeft; int itsBottom; int itsRight; }; Rectangle::Rectangle(int top, int left, int bottom, int right) { itsTop = top; itsLeft = left; itsBottom = bottom; itsRight = right; itsUpperLeft.SetX(left); itsUpperLeft.SetY(top); itsUpperRight.SetX(right); itsUpperRight.SetY(top); itsLowerLeft.SetX(left); itsLowerLeft.SetY(bottom); itsLowerRight.SetX(right); itsLowerRight.SetY(bottom); } int Rectangle::GetArea() const { int Width = itsRight-itsLeft; int Height = itsTop - itsBottom; return (Width * Height); } int main() { Rectangle MyRectangle (100, 20, 50, 80 ); int Area = MyRectangle.GetArea(); cout << "Flaeche: " << Area << "\n"; cout << "Obere linke X-Koordinate: "; cout << MyRectangle.GetUpperLeft().GetX(); cin.get(); return 0; }Was passiert im Grunde bei der Kommentierten Stelle in Zeile 29-32? Wie werden die miteinander verknüpft? Vielleicht kann das jemand zur Veranschaulischung in langform ausschreiben. Soll SetX und SetY die Koordinatenlinien X-Achse und Y-Achse darstellen? Und sollen dann Zeile 29-32 erklären, dass Sie mit der Klasse Point verknüpft werden und im Koordinatensystem eingetragen werden, sodass ein Rechteckt entsteht? Oder geschieht die Eintragung ins Koordinatensystem in Zeile 34-37?
Bitte um Aufklärung

DANKE IM VORAUS!!!
-

Die Funktionen in Zeile 29-32 geben einfach die Eckpunkte des Rechtecks zurück, davon gibt es keine Langform. Die Eckpunkte sind vom Typ Point, was ja Sinn macht.
Mit den Funktionen in Zeile 34-37 kannst du neue Eckpunkte für das Rechteck setzen. Wahrscheinlich meinst du das mit "Eintragung ins Koordinatensystem".
-
KompiPauer schrieb:
Es handelt sich um einen Rechteck, der mittels 2 Punkten im Koordinatensystem (X-Y-Achse) eine Gerade bildet. 8 Punkte werden also benötigt um 4 Geraden zu bilden und somit einen Rechteck zusammezufügen.
Echt? Ich dachte immer 4 Punkte würden reichen um ein Rechteck zu beschreiben. Weil das sind ja Ecken, und an jeder Ecke "treffen" sich 2 Geraden, die sich diesen Punkt "teilen".
Im Übrigen mal ein ganz kurzes Beispiel, das dir zeigt wie schlecht diese Implementierung ist:Rechteck rect(0, 0, 100, 100); Point p; p.setX(20); p.setY(0); rect.setUpperLeft(p);Und jetzt sag mir ob das noch ein Rechteck ist...
Wenn ja -> Beweis
Wenn nein -> Lösung des Problems
-
Diese Rechteckklasse ist ziemlicher Käse.
Mit dem Konstruktor Rectangle (int top, int left, int bottom, int right); erzeugt man ein Rechteck, dass zu den Koordinatenachsen parellele Kanten hat.
Die Position der Kanten kann man mit den SetTop.. usw Methoden nachträglich verändern.
Zusätzlich speichert das Rechteck noch seine Eckpunkte, die man mit den SetUpperLeft.. usw Methoden verschieben kann, auch so, dass es gar kein Rechteck mehr ist. Vor allem passen danach Eckpunkte und Seiten nicht mehr zusammen. Ich kann die Eckpunkte eines Rechtecks verändern ohne dass sich dessen Fläche verändern. Für den normalen Anwender wahrscheinlich ein sehr überraschendes Verhalten.Entweder man lässt nur parallel ausgerichtete Rechtecke zu, dann benötigt man zwei punkte, nämlich lefttop und rightbottom, oder beliebige Rechtecke, dann braucht man alle vier Eckpunkte. Bei letzterem muss man sich dann überlegen wie man so ein Rechteck erzeugt und modifiziert.
-
Sofern man wirklich mathematische Rechtecke hat genügt eigentlich nur 1 Punkt und eine Breite/Höhe. Sofern die noch drehbar im Koordinatensystem sein sollen noch ein Winkel. Oder man definiert halt eine Vieleckklasse und leitet ein Rechteck als Spezialisierung von diesen ab.
Wie schon angesprochen, hast du aktuell sehr viele unnötige Informationen für ein korrektes Rechteck.
-
Fedaykin schrieb:
Oder man definiert halt eine Vieleckklasse und leitet ein Rechteck als Spezialisierung von diesen ab.
Bei sowas aber bitte aufpassen und ans Liskovsche Substitutionsprinzip denken. Was mit Vielecken geht, geht halt nicht immer mit einem Rechteck.
-
Lieber Noob, kannst Du bitte nächstens ordentliche Titel für Deine Threads/Frage wählen? Danke.
-
Das ist nur ein Beispiel, um zu verstehen wie die Klassen miteinander arbeiten. Dass unnötig viel Infos im Bsp. waren, war ja eigentlich klar.
Bin gerade auf der Arbeit, werde heute Abend nochmal vorbeischauen, sofern noch Fragen meinerseits offen sind.Danke erstmal für eure Mühe.