Konstruktor



  • Wie sieht es eigentlich mit meinem Konstruktor aus Leute ?
    Ich meine in der Aufgabe ist ja kaum gesagt worden was die überhaupt wollen ?



  • Es ist offensichtlich was gefordert ist.



  • Oder anders gesagt, dein Konstruktor entspricht nicht den Anforderungen.



  • Was fehlt genau an meinem Konstruktor ?

    Es ist nur ne Ünungsaufgabeb



  • Der ist einfach nur falsch. Sinn des Konstruktors ist es anhand der übergebenen Parameter die Klassenmember korrekt zu initialisieren.
    Also bei deinem Code aus initialSize die beiden Member m_rectangles und m_arraySize zu setzen (m_nextFree ist ja schon über die Klassendeklaration im Header auf 0 gesetzt).

    Die (erste) Lösung sieht also so aus:

    CDrawing::CDrawing(int initialSize)
    {
        m_arraySize = initialSize;
        m_rectangles = new CRectangle[initialSize];
    }
    

    Für die Initialisierung gibt es aber explizit noch die Initialisierungsliste bei den Konstruktoren, so daß die Lösung dann so lautet:

    CDrawing::CDrawing(int initialSize)
     : m_arraySize(initialSize), m_rectangles(new CRectangle[initialSize])
    {
    }
    

    In gutem (professionellen) C++ Code würde man aber dann stattdessen std::vector<> benutzen.

    Und auf die ungarische Notation ("C" am Anfang des Klassennamens) solltest du auch zukünftig verzichten.

    PS: Die Schreibweise

    CDrawing(int initialSize = 10);
    

    im Header bedeutet nur, daß 10 der Vorgabewert (default value) ist, wenn man beim Aufruf keinen Parameter angibt, also

    CDrawing drawing;
    

    So wird der Konstruktor mit 10 als initialSize aufgerufen (innerhalb des Konstruktorcodes kann dir das aber egal sein und muß nicht explizit darauf geprüft werden).





  • Kann mir jemand paar tipps geben wie ich bei der Aufgabe d) vorgehen soll?

    Ich habe nicht mal ne idee wie ich rangehen soll,aber irgendwie muss ich es ja lernen



  • Gast83 schrieb:

    http://www.informatikerboard.de/board/thread.php?postid=15665#post15665

    Ja, das passiert, wenn man auf solche schlechten Fragestellungen eingeht.



  • Ja aber in dem Board gibt es leider nur freche Antworten leider



  • void add(const CRectangle& rectangle){
    
    for(int i =0 ; i>= rectangle ;i++){
    
    m_rectangles = new CRectangle[rectangle+i]; nächste freie Position geschrieben ?
    
    }
    

    Passt so in etwa der Anfang der add Methode?



  • Was sagt denn dein Compiler dazu? Du musst deinen Code schon ausprobieren...



  • Fehler : m_rectangles not declared in this scope

    Aber wie ich es weg bekomme ,keine Ahnung.



  • Du hast add als freie Funktion implemtiert und nicht als Klassenfunktion. Klassenfunktion haben die Form
    Klassennamen::Funktionnamen(Parameter)



  • xxx6 schrieb:

    Passt so in etwa der Anfang der add Methode?

    Jaja



  • void CDrawing::add(const CRectangle& rectangle){
    
    for(int i =0 ; i>= rectangle ;i++){
    
    m_rectangles = new CRectangle[rectangle+i]; nächste freie Position geschrieben ?
    
    }
    
    if(m_rectangles <= CRectangle[rectangles+99]){
    m_rectangles = new CRectangle[rectangles+rectangles]; verdoppelt?
    }
    }
    

    Aus meiner Sicht sollte das verdoppeln dann auch passen? 😃

    Wenn manni sich nicht über mich lustig gemacht hat 😃



  • Bei Kommentaren wird ein "//" voran gestellt.

    Da passt die Frage, ob Du überhaupt versuchst Dein Code zu kompilieren?



  • Und, was soll der <= Vergleich mit rectangle? Was willst du damit ausdrücken?



  • void CDrawing::add(const CRectangle& rectangle){
    
    for(int i =0 ; i<= rectangle ;i++){
    
    m_rectangles = new CRectangle[rectangle+i]; nächste freie Position geschrieben ?
    
    }
    m_rectangles = new CRectangle[rectangle];
    CRectangle[rectangle] =100;
    int *tmp = CRectangle;
    if(CRectangle[rectangle]<=CRectangle[100]){ wenn der Speich kleiner 100 ist
        m_rectangles = new CRectangle[rectangle*2]; doppelte Grösse
    
        for(int i =0 ; i<= rectangle ;i++){
                CRectangle[rectangle]= tmp[rectangle];
    }
    delete[] tmp;
    CRectangle[rectangle];
    rectangle++;
    }
    }
    

    Ich weiss nicht ob dieser Ansatz auch katastrophe ist aber ich poste ihn mal.
    Ich habe nochmal neu angefangen

    Stimmt dieser Teil ein wenig ?
    Ich habe auch eine temporäre Variable erstellt.



  • Hast du unsere Beiträge überhaupt gelesen?

    Vergiss deine add Methode und beginn nochmal bei null. Da ist so viel falsch dran, da weiß ich nicht mal wo ich anfangen soll.

    Überlege dir genau was du erreichen willst und wie dir der Zustand deiner Klasse dabei helfen kann (also die Membervariablen).



  • xxx6 schrieb:

    Stimmt dieser Teil ein wenig ?

    Mich verlässt so langsam die Geduld mit dir, so sehr ich Anfängern auch helfen möchte. Bitte mache ab sofort folgendes

    1. Über die Aufgabenstellung nachdenken (das tust du ja schon mehr oder weniger)
    2. Code schreiben (auch das machst du noch)
    3. Code kompilieren
    4. [Falls Fehlermeldungen] Fehler beheben. Zurück zu 3.
    5. [Falls Fehler nicht zu beheben sind] Im Forum nachfragen, dann zurück zu 3.
    6. [Wenn Code kompiliert] Programm testen
    7. [Falls Programm nicht funktioniert] Im Forum nachfragen, zurück zu 3.
    8. [Wenn Programm funktioniert] Im Forum für die Hilfe bedanken


Anmelden zum Antworten