Konstruktor frage c++



  • Irgendwie ist es zum Heulen 😃



  • Oh nein immer noch falsch oder wie ?



  • Das sind doch nur paar Zeilen Code, siehst du nicht, was du machst?
    Die newSize Berechnung ganz oben schaut schon mal richtig aus, aber warum ganz oben? Das brauchst doch erst, wenn du festgestellt hast, dass der Speicher nicht reicht.
    Und an der richtigen Stelle fängst du schon wieder an, newSize auszurechnen, und zwar falsch.



  • @zalo3 sagte in Konstruktor frage c++:

    Aber bitte noch um eine kleine Erklärung kann ich sozusagen mit dem size_t auch weiter oben auf den neuen Speicher zugreifen oder wie?

    Du kannst auf nix zugreifen, daß es an der Stelle noch nicht gibt. std::size_t ist bloß ein weiterer Datentyp wie auch char, int, float, std::string ... für den garantiert ist, daß er groß genug für alle Speichergrößen ist.

    Zu Deinem Code:

    @zalo3 sagte in Konstruktor frage c++:

    Gut ich habe es so gemacht wie du gesagt hast .

    // ...
    
    if(m_nextFree == m_arraySize ){
    	int newSize = m_arraySize*2; // hier ...
    	CRectangle* newRectangle = new CRectangle [ newSize];
    	// ...
    

    ... berechnest Du bisher die neue Größe. Warum also nicht auch hier die Entscheidung, wie viel mehr Speicher in Abhängigkeit von m_arraySize?



  •  void CDrawing::add(const CRectangle& rectangle){
            if(m_nextFree == m_arraySize ){
    	    std::size_t newSize;
    		if( m_arraySize < 100 ){
    		    newSize = m_arraySize * 2;
    		}
    		else{
    		    newSize = m_arraySize + 100;
    		}
    	CRectangle* newRectangle = new CRectangle [ newSize];
        for(int i = 0; i<(m_arraySize);i++){
    
    		newRectangle[i] = m_rectangles[i];
    
        }
        delete[] m_rectangles;
        m_rectangles = newRectangle;
    
        m_arraySize = newSize;
    
    }
         m_rectangles[m_nextFree] = rectangle;
         m_nextFree++;
    
         }
    
    

    Was ich nicht erstehe warum ich da das size_t bastele ?
    Was bewirkt das ?
    Damit ich es nächstes mal auch machen kann.



  • Schaut soweit richtig aus.
    size_t ist praktisch ein int. Diese Datentypen haben verschiedene Wertebereiche. Der vom int ist z.B. nicht definiert, bei VS ist er auch unter 64Bit 32 Bit groß und geht damit ungefähr -2 Mrd bis +2 Mrd. Damit könntest du keine 3 Mrd Rectangles speichern.
    Der size_t ist vorzeichenlos und bei dem ist garantiert, dass du so viele Elemente speichern kannst, wie du Speicher hast.
    Für deinen Fall kannst du auch int schreiben, das wär auch egal, aber size_t wär der korrekte Datentyp.



  • @zalo3 sagte in Konstruktor frage c++:

    // ...
    

    Na endlich.

    @zalo3 sagte in Konstruktor frage c++:

    Was ich nicht erstehe warum ich da das size_t bastele ?
    Was bewirkt das ?

    Du kannst auch einen int oder sonstwas basteln. Es ist halt nur für std::size_t garantiert, daß der Typ groß genug ist für alles, was im Speicher rumliegt.



  • jaaaaaaaaaaaa endlich geschafft .😄

    JETZT kann ich mich an die Ausgabe der print Methode machen (von Aufgabe)oder es einfach lassen .
    Wahrscheinlich würde ich weitere 8h brauchen😄



  • @zalo3 sagte in Konstruktor frage c++:

    JETZT kann ich mich an die Ausgabe der print Methode machen

    omg. bitte nicht, wenn Du es vermeiden kannst.



  • Ja ehrlich gesagt . Ich lasse es . Eine 1.0 werde ich sowieso nicht in Klausur schaffen.
    Ziel bleibt das bestehen .
    Wäre für mich auch mehr als genug.
    Wahrscheinlich werde ich mich vielleicht an ner anderen AUfgabe ran wagen.
    Aber das problem ist ,dass ich das implementieren mit algorithmen usw einfach nicht selber schaffe.


Anmelden zum Antworten