Konstruktor
-
https://www.pic-upload.de/view-34084113/g.png.html
Ist mein Konstruktor richtig implementiert?
#include "CDrawing.h" CDrawing::CDrawing(int initialSize) { if(initialSize>0 && initialSize <=0){ m_initialSize = initialSize; } else{ m_initialSize = 10; } if(m_nextFree>=0 && m_nextFree<=m_arraySize){ m_nextFree= nextFree; } else{ m_nextFree=0; } if(m_arraySize>0){ m_arraySize= arraySize; } } CDrawing::~CDrawing() { //dtor }
#ifndef CDRAWING_H #define CDRAWING_H class CDrawing { private: CRectangle* m_rectangles; int m_nextFree = 0; int m_arraySize; public: CDrawing(int initialSize = 10); void ~CDrawing(); void add(const CRectangle& rectangle); void print(); void drawFiltered(CScreen& screen, char filter =0); }; #endif // CDRAWING_H
Ich weiss das das iostream usw fehlt ,aber stimmt der code soweit?
-
if(initialSize>0 && initialSize <=0)
Komische Methode um nie zu schreiben.
-
Welcher Dummkopf von Lehrer kennt da schon wieder keinen std::vector?
-
Wir behandeln nur Grundlagen der Informatik.
Passt aber so mein Konstruktor mit den Zusicherungen ?
-
Ich meine natürlich <=10
Dann wäre es ok ?
-
xxx6 schrieb:
Wir behandeln nur Grundlagen der Informatik.
std::vector ist Grundlage.
Passt aber so mein Konstruktor mit den Zusicherungen ?
Nein
-
if(m_nextFree>=0 && m_nextFree<=m_arraySize
Und was meinst du "eigentlich" da?
-
if(m_nextFree>=0 && m_nextFree<=m_arraySize
Das stand ja in etwa so in der Zusicherung ?
Ich könnte es auch so machen wie in der Zusicherung exakt:
if( 0<= m_nextFree <= m_arraySize)
In Ordnung?
-
Nein.Welchen Wert hat m_nextFree an der Stelle? Und m_arraySize?
-
der default Wert von m_nextFree = 0.
Ich weiss nicht wie gross m_arraySize ist.
Wo steht das ?
-
xxx6 schrieb:
Ich weiss nicht wie gross m_arraySize ist.
Wo steht das ?Genau die Frage stellt sich der Compiler auch.
-
Ja aber die Header war ja mir so gegeben ?
Soll ich auch arraySize =10 setzen ?
In der Aufgabe ist es ja nicht definiert .
-
Was setzt du denn noch auf 10? Steht das im Header? Warum 10? Welche Bedeutung haben die Werte und Variablen? Was ist eigentlich mit m_rectangles? Welchen Zustand soll das erzeugte Objekt haben, nachdem der Konstruktor ausgeführt wurde?
-
EHrlich gesagt weiss ich es auch nicht.
Ich weiss auch nur die Sachen, die in der Aufgabenstellung stehen
-
Tja, dann hast du wohl ein Problem...
-
Das ist meine CRectangle.h
/* * CRectangle.h * * Created on: 05.01.2015 * Author: mnl */ #ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ #define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ #include <ostream> using namespace std; #include "CPoint.h" #include "CScreen.h" /** * Diese Klasse beschreibt ein Rechteck in einem * Ganzzahl-Koordinatensystem über die Eigenschaften * "untere linke Ecke" und "obere rechte Ecke". * * Als zusätzliche Eigenschaft hat die Klasse ein Zeichen * (char) das bei der graphischen Darstellung als * Füllzeichen verwendet wird. */ class CRectangle { private: /** Die linke untere Ecke. */ CPoint m_bottomLeft; /** Die rechte obere Ecke. */ CPoint m_topRight; /** Das Füllzeichen für die graphische Darstellung. */ char m_fillChar; public: /** * Erzeugt ein neues Rechteck mit linker unterer und * rechter oberer Ecke bei (0,0) und dem angegebenen * Füllzeichen. */ CRectangle(char fillChar = '#'); /** * Erzeugt ein neues Rechteck mit der angegebenen linken * unteren und rechten oberen Ecken sowie dem angegebenen * Füllzeichen. * * Beim Erzeugen wird die Zusicherung überprüft, dass die * rechte obere Ecke rechts von und oberhalt der linken * unteren Ecke liegen muss! Falls die x-Koordinate * der rechten oberen Ecke nicht größer als die x-Koordinate * der linken unteren Ecke ist, wird sie auf den Wert * der x-Koordinate der linken unteren Ecke gesetzt. Falls * die y-Koordinate der rechten oberen Ecke nicht größer als * die y-Koordinate der linken unteren Ecke ist, wird sie auf * dem Wert der y-Koordinate der linken unteren Ecke gesetzt. */ CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#'); /** * Weist den Eigenschaften "linke untere Ecke" und "rechte obere * Ecke" neue Werte zu. * * Vor der Zuweisung wird die Zusicherung überprüft, dass die * rechte obere Ecke rechts von und oberhalt der linken * unteren Ecke liegen muss! Ist das nicht der Fall wird keines * der Attribute verändert. */ void setCorners (CPoint bottomLeft, CPoint topRight); /** * Liefert die linke untere Ecke des Rechtecks zurück. */ CPoint getBottomLeftCorner() const; /** * Liefert die rechte obere Ecke des Rechtecks zurück. */ CPoint getTopRightCorner() const; /** * Weist dem Füllzeichen den angegebene Wert zu. */ void setFillChar(char fillChar = '#'); /** * Liefert den Wert des Füllzeichens. */ char getFillChar() const; /** * Prüft, ob die beiden Rechtecke in allen Eigenschaften übereinstimmen. */ bool operator== (const CRectangle& other) const; /** * Zeichnet das Rechteck in das übergebene Bildschirmobjekt. Das heisst, * es werden mit CScreen::setPoint die Werte aller "Punkte", die im * Bereich des Rechtecks liegen, auf das Füllzeichen des Rechtecks gesetzt. */ void draw(CScreen& screen) const; /** * Gibt eine textuelle Darstellung des Rechtecks auf dem übergebenen * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben. */ friend ostream& operator<< (ostream& lhs, const CRectangle& rhs); }; #endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */
implemetierte cpp
/* * CRectangle.cpp * * Created on: 05.02.2015 * Author: lipp */ #include "CRectangle.h" #include "CPoint.h" CRectangle::CRectangle(char fillChar) { m_fillChar = fillChar; /** * Erzeugt ein neues Rechteck mit der angegebenen linken * unteren und rechten oberen Ecken sowie dem angegebenen * F�llzeichen. * * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die * rechte obere Ecke rechts von und oberhalt der linken * unteren Ecke liegen muss! Falls die x-Koordinate * der rechten oberen Ecke nicht gr��er als die x-Koordinate * der linken unteren Ecke ist, wird sie auf den Wert * der x-Koordinate der linken unteren Ecke gesetzt. Falls * die y-Koordinate der rechten oberen Ecke nicht gr��er als * die y-Koordinate der linken unteren Ecke ist, wird sie auf * dem Wert der y-Koordinate der linken unteren Ecke gesetzt. */ } CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar) { m_fillChar = fillChar; m_bottomLeft = bottomLeft; m_topRight = topRight; if(topRight.getX() < bottomLeft.getX() ){ m_topRight.CPoint::setX(bottomLeft.getX()); } if(topRight.getY() < bottomLeft.getY()){ m_topRight.setY(bottomLeft.getY()); } } void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight) { if(topRight.getX()> bottomLeft.getX() && topRight.getY()> bottomLeft.getY()){ m_bottomLeft = bottomLeft; m_topRight = topRight; } } CPoint CRectangle::getBottomLeftCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return m_bottomLeft; } CPoint CRectangle::getTopRightCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return m_topRight; } void CRectangle::setFillChar(char fillChar) { // Bitte implementieren m_fillChar = fillChar; } char CRectangle::getFillChar() const { // Bitte implementieren und dabei das return-Statement ersetzen. return m_fillChar; } bool CRectangle::operator ==(const CRectangle& other) const { return m_topRight == other.m_topRight && m_bottomLeft == other.m_bottomLeft &&m_fillChar == other.m_fillChar; } void CRectangle::draw(CScreen& screen) const { for(int j = m_bottomLeft.getX(); m_topRight.getX()>=j;j++){ for(int i = m_bottomLeft.getY(); m_topRight.getY()>=i; i++) { screen.setPoint(CPoint(j , i),m_fillChar); } } } ostream& operator<< (ostream& lhs, const CRectangle& rhs){ lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<< " fillChar"; return lhs;
Hilft das weiter ?
Ich dachte aber das der Konstruktor mit diesem Aufgabenteil nichts zu tun hatte?
-
Hilft das weiter ?
Es würde dir weiterhelfen, wenn du über die Fragen nachdenkst. Ich werde deine Aufgabe nicht lösen.
-
xxx6 schrieb:
EHrlich gesagt weiss ich es auch nicht.
Ich weiss auch nur die Sachen, die in der Aufgabenstellung stehenWas könnte den wohl mit ArraySize gemeint sein...
-
Die grösse eines Arrays [n+1];
Oder halt 10?
-
xxx6 schrieb:
Die grösse eines Arrays [n+1];
Was soll das +1?