@Programmer33 sagte in C++ Error:
eine untere Linie ist ja21 Zeichen lang .
Man muss ja zuerst 21 mal gerade gehen und dann wieder hoch wieder links 21 mal ?
Wie macht man das als Code ?
Erstmal garnicht....
operator<<()
Sorry, hier sollst du kein Newline einfügen, steht doch extra in der Aufgabe. operator<<() überladen und kein Newline am Ende!
Desweiteren gibt er falsche Zahlen aus, es fehlen Leerzeichen und Hochkommas...
Der 2. Konstruktor ist so falsch, komplett
setCorners() ist auch kaputt...
...und solange brauchst du nicht mit der draw()-Methode anfangen. Die ist dann einfach und hat nur drei Zeilen plus geschweifter Klammern wenn mann will...
Versuche Punkt für Punkt oben abzuarbeiten bis du das selbe Ergebnis hast. Evtl. mit Punkt 2 anfangen. Aber Punkt 1 brauchst du zum überprüfen. Die zweite Zahl (die erste Y-Koordinate) gibst Du falsch aus:
lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() // Muss getBottomLeftCorner().getY() sein
In der Aufgabe steht du sollst ein paar CRectangles erzeugen zum überprüfen...
Und den operator==() testen...
Hier wie es aussehen soll (oder könnte falls ich Fehler drin habe. Aber du Kannst ja die Ausgabe mit deiner Klausur vergleichen. Also was da gefordert wurde):
Ich habe noch ein paar Komentare angefügt...
Die zugehörige main.cpp ist unten
Test Default-Konstruktor:
rec = CRectangle[(0,0), (0,0), '#']
Test 2. Konstruktor:
r2{ {5,5}, {5,5} } = CRectangle[(5,5), (5,5), '#'] // passt (genauer: ist nicht größer. Also Wert aus bottomLeft)
r3{ {5,5}, {10,10} } = CRectangle[(5,5), (10,10), '#'] // passt
r4{ {5,5}, {4,10} } = CRectangle[(5,5), (5,10), '#'] // 4 < 5 also nehme bottomLeft.getX() = 5
r5{ {5,5}, {10,4} } = CRectangle[(5,5), (10,5), '#'] // dito nur y
Test .setCorner():
r5.setCorners( {2,3}, {2,3} ) = CRectangle[(5,5), (10,5), '#'] // zweite 2,3 ist nicht größer, also laut Aufgabe nichts ändern!
r5.setCorners( {2,3}, {4,2} ) = CRectangle[(5,5), (10,5), '#'] // 2 < 3, nicht ändern
r5.setCorners( {2,3}, {2,4} ) = CRectangle[(5,5), (10,5), '#'] // 2 < 2, nope, nicht ändern
r5.setCorners( {2,3}, {42,23} ) = CRectangle[(2,3), (42,23), '#'] // jep, x2 u. y2 größer. Also ändern...
Test operator==():
r2=CRectangle[(5,5), (5,5), '#'] == r3=CRectangle[(5,5), (10,10), '#'] == false
r3 = r2;
r2=CRectangle[(5,5), (5,5), '#'] == r3=CRectangle[(5,5), (5,5), '#'] == true
r2.setFillChar('X');
r2=CRectangle[(5,5), (5,5), '#'] == r3=CRectangle[(5,5), (5,5), 'X'] == false // weil unterschiedliche Füllzeichen
Hier ist was dein Programm ausgibt (was anderes):
Test Default-Konstruktor:
rec = CRectangle[(0,0),(0,0),#]
Test 2. Konstruktor:
r2{ {5,5}, {5,5} } = CRectangle[(0,0),(0,0),#] // scheint nichts gesetzt. Aber die 2. Zahl ist ja eh immer gleich der 4.
r3{ {5,5}, {10,10} } = CRectangle[(0,0),(0,0),#]
r4{ {5,5}, {4,10} } = CRectangle[(0,0),(0,0),#]
r5{ {5,5}, {10,4} } = CRectangle[(0,0),(0,0),#]
Test .setCorner():
r5.setCorners( {2,3}, {2,3} ) = CRectangle[(0,0),(0,0),#]
r5.setCorners( {2,3}, {4,2} ) = CRectangle[(2,2),(4,2),#]
r5.setCorners( {2,3}, {2,4} ) = CRectangle[(2,4),(2,4),#]
r5.setCorners( {2,3}, {42,23} ) = CRectangle[(2,23),(42,23),#]
Test operator==():
r2=CRectangle[(0,0),(0,0),#]
== r3=CRectangle[(0,0),(0,0),#]
== true
r3 = r2;
r2=CRectangle[(0,0),(0,0),#]
== r3=CRectangle[(0,0),(0,0),#]
== true
r2.setFillChar('X');
r2=CRectangle[(0,0),(0,0),#]
== r3=CRectangle[(0,0),(0,0),X]
== false
Mit dieser main.cpp habe ich getestet:
// main.cpp
#include <iostream>
#include <ios>
#include "CScreen.h"
#include "CRectangle.h"
#include "CPoint.h"
int main() {
CRectangle rec;
std::cout << "\tTest Default-Konstruktor:\nrec\t\t= " << rec
<< "\n\tTest 2. Konstruktor:\n";
CRectangle r2{ {5,5}, {5,5} };
std::cout << "r2{ {5,5}, {5,5} }\t= " << r2 << "\n";
CRectangle r3{ {5,5}, {10,10} };
std::cout << "r3{ {5,5}, {10,10} }\t= " << r3 << "\n";
CRectangle r4{ {5,5}, {4,10} };
std::cout << "r4{ {5,5}, {4,10} }\t= " << r4 << "\n";
CRectangle r5{ {5,5}, {10,4} };
std::cout << "r5{ {5,5}, {10,4} }\t= " << r5
<< "\n\tTest .setCorner():\n";
r5.setCorners( {2,3}, {2,3} );
std::cout << "r5.setCorners( {2,3}, {2,3} ) = " << r5 << "\n";
r5.setCorners( {2,3}, {4,2} );
std::cout << "r5.setCorners( {2,3}, {4,2} ) = " << r5 << "\n";
r5.setCorners( {2,3}, {2, 4} );
std::cout << "r5.setCorners( {2,3}, {2,4} ) = " << r5 << "\n";
r5.setCorners( {2,3}, {42, 23} );
std::cout << "r5.setCorners( {2,3}, {42,23} ) = " << r5
<< "\n\tTest operator==():\n" << std::boolalpha;
std::cout << "r2=" << r2 << " == r3=" << r3
<< "\t== " << (r2==r3)
<< "\nr3 = r2;\n";
r3 = r2;
std::cout << "r2=" << r2 << " == r3=" << r3
<< "\t== " << (r2==r3)
<< "\nr2.setFillChar('X');\n";
r3.setFillChar('X');
std::cout << "r2=" << r2 << " == r3=" << r3
<< "\t== " << (r2==r3) << "\n";
CScreen scr;
// r5.setCorners({5,5}, {25,15});
// r5.draw(scr);
// scr.print();
}
hth. Fragen bitte auf eingekreiste Probleme.