Konstruktor



  • 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



  • #include "CDrawing.h"
    #include <ostream>
    using namespace std;
    CDrawing::CDrawing(int initialSize)
    {
        if(initialSize>0 && initialSize <=10){
    
            m_initialSize = initialSize;
        }
        else{
            m_initialSize = 10;
        }
        if(0<= m_nextFree <= m_arraySize){
    
            m_nextFree= nextFree;
        }
        else{
    
            m_nextFree=0;
        }
        if(m_arraySize>0 && m_arraySize <=10){
            m_arraySize= arraySize;
        }
        m_arraySize = initialSize;
        m_rectangles = new CRectangle[initialSize];
    }
    

    Ich habe jetzt wieder angefangen den Konstruktor zu implementieren.
    Ich weiss das viele denken ,dass ich einfach nur ne blöde Lösung haben will.

    ABer ich möchte es wirklich irgendwie versuchen zu lösen und zu verstehen.

    arraySize wird ja nicht erkannt leute.

    Soll ich dann dafür int arraySize =10; erstellen im Header ?
    Die 10 habe ich einfach so gewählt .

    Ansonsten würden die Fehler ja nie weg gehen.
    Ich weiss nicht ob ich durch das Lösen dieser Aufgabe eine andere selbst lösen kann wieder 😃
    Aber ich will sie trotzdem lösen



  • Ernsthaft, wenn du nicht anfängst unsere Posts zu lesen und ich das erkennen kann, war es das letzte mal das ich in diesem Thread schreibe.
    Th69 hat dir ausführlich erklärt wie der Konstruktor auszusehen hat. Inklusive Code... Wie kommst du auf die Idee jetzt wieder irgendwelchen blödsinn zu basteln???

    Th69 schrieb:

    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).

    Edit: Das einzige, was man evt. aufnehmen kann, wäre der Vergleich ob initialSize größer Null ist. Das würde man aber mit einer Assertion lösen, anstatt irgendeinen Wert zu nehmen, den der Anwender gar nicht haben will.



  • Schlangenmensch schrieb:

    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).

    Sorry war irritiert wegend dieser oberen Aussage.

    Dachte alles wäre falsch. 😃



  • if(CRectangle[rectangle]<=CRectangle[100]){ wenn der Speich kleiner 100 ist
    
    }
    

    Vergleicht man das so in der if Bedingung ?
    Ist das so richtig?



  • xxx6 schrieb:

    if(CRectangle[rectangle]<=CRectangle[100]){ wenn der Speich kleiner 100 ist
       
    }
    

    Vergleicht man das so in der if Bedingung ?
    Ist das so richtig?

    Der Vergleich kann richtig sein oder auch nicht. Was genau willst du denn da prüfen?



  • Was willst du denn so vergleichen?

    Ich glaube, ich habe dich schon mal gefragt, was meinst du, wofür deine Klasse die Vairablen m_nextFree und m_arraySize hat?

    Kompiliert dein Vergleich denn?



  • ich will überprüfen ob der Inhalt des Arrays rectangle kleiner als 100 ist 😃

    ich dachte das wäre so richtig?

    Ich weiss das ich nicht so fit bin beim proggen aber ich bemühe mich so gut es gehr 😃



  • Meinst du, wieviele ELemente du bereits eingefügt hast, oder wieviel Speicher du reserviert hast?



  • xxx6 schrieb:

    ich will überprüfen ob der Inhalt des Arrays rectangle kleiner als 100 ist 😃

    Das ergibt keinen Sinn!

    xxx6 schrieb:

    ich dachte das wäre so richtig?

    Es ist schon kritisch, wenn Du nicht einmal selbst weißt ob Du das dachtest oder nicht.

    xxx6 schrieb:

    Ich weiss das ich nicht so fit bin beim proggen aber ich bemühe mich so gut es gehr 😃

    Du bemühst dich kein Stück, sonst würdest Du (vollständig) auf Fragen eingehen, die dir gestellt werden.

    An alle anderen Forenteilnehmer: Es lohnt sich nicht darauf weiter einzugehen. Der Autor der Fragestellung ist nicht in der Lage auch nur ein wenig reflektiert auf die Aufgabe und Hilfestellungen einzugehen. Quellen:
    https://www.mikrocontroller.net/topic/434212
    http://www.informatikerboard.de/board/thread.php?threadid=3686&threadview=0&hilight=&hilightuser=0&page=1
    https://www.c-plusplus.net/forum/344399



  • Ist mit fast garantierter Wahrscheinlichkeit ein Troll. Kann man also vermutlich einfach schließen.

    Kein Mensch, egal wie wenig technisch oder logisch versiert, verhält sich so. Es sei denn er findet es, warum auch immer, lustig, Stuss-Code zu posten und dann die empörten Reaktionen zu lesen.


Anmelden zum Antworten