Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ Konstruktor

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.07.2018, 14:30 Uhr
Power33



Passt der Konstruktor?
https://www.pic-upload.de/view-35663883/Bildschirmfoto2018-07-21um13.21.10.png.html

C++:
#ifndef CDRAWING_H_
#define CDRAWING_H_
#include "CPoint.h"
#include "CScreen.h"
#include "CRectangle.h"

class CDrawing{
private:
    CRectangle* m_rectangles;
    int m_nextFree = 0;
    int m_arraySize;

public:
    CDrawing(int initialSize =10);
     ~CDrawing();
    void add(const CRectangle& rectangle);
    void print();
    void drawFiltered( CScreen& screen, char filter = 0);



};




#endif /* CDRAWING_H_ */





C++:

#include<iostream>
using namespace std;
#include"CDrawing.h"

CDrawing::CDrawing(int initialSize ){


if(initialSize >10 || initialSize < 0){
    initialSize = 10;


}
else {
    m_arraySize = initialSize;
    m_rectangles = new CRectangle [m_arraySize];

}


}

CDrawing::~CDrawing(){
    
    delete [] m_rectangles;
}





 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.07.2018, 16:08 Uhr
ao

(Operator)


Nein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.07.2018, 16:13 Uhr
ao

(Operator)


Woher nimmst du, dass initialSize zwischen 0 und 10 liegen muss? Kann es keine Zeichnungen mit mehr Elementen geben?

Und wenn initialSize außerhalb liegt, macht der Konstruktor das Falsche. Er initialisiert m_rectangles und m_arraySize nicht.

Übrigens ist der Kurs, den du da machst, scheiße, wenn er immer noch mit selbstverwaltetem Speicher hantiert. Ihr müsstet so langsam mal weit genug sein für C++-Container.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.07.2018, 16:31 Uhr
Power33



Woher nimmst du, dass initialSize zwischen 0 und 10 liegen muss? Kann es keine Zeichnungen mit mehr Elementen geben?

Ja stimmt hast Recht.

Aber woher weiss ich denn wie sonst die Zusicherung aussehen soll?

Wann wird denn dann der Default Wert gesetzt ?
Es steht doch nichts
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.07.2018, 18:58 Uhr
Power33




C++:

#include<iostream>
using namespace std;
#include"CDrawing.h"

CDrawing::CDrawing(int initialSize, int arraySize ){
m_arraySize = arraySize;

if(m_arraySize < 0){

    initialSize = 10;
    m_arraySize = initialSize;


}
else{

    m_rectangles = new CRectangle [m_arraySize];
}


}

CDrawing::~CDrawing(){

    delete [] m_rectangles;
}







Bin mir nicht sicher?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
22.07.2018, 13:49 Uhr
ao

(Operator)


Warum hat der Konstruktor jetzt zwei Argumente? Wozu gibt es initialSize UND arraySize?

Und immer noch: Wenn arraySize zu klein ist, wird m_rectangles nicht initialisiert. Das bedeutet Griff ins Klo, sobald add() oder print() aufgerufen wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
22.07.2018, 14:05 Uhr
ao

(Operator)



Zitat von Power33:
Aber woher weiss ich denn wie sonst die Zusicherung aussehen soll?

Entweder es steht in der Aufgabe oder du musst eine sinnvolle Bedingung selber finden.

(initialSize > 0) scheint mir fürs erste eine gute Idee zu sein.


Zitat:
Wann wird denn dann der Default Wert gesetzt?

Ich verstehe nicht, wieso es hier überhaupt Defaultwerte gibt. Kann die Klasse nicht einfach verlangen, dass der Anwender die Größe richtig setzt?

Wie schon mehrfach angedeutet: Deine Aufgaben sind zum Lernen von C++ eigentlich ungeeignet. Kernproblem ist, dass Pointer benutzt werden, um dynamisch allozierte Arrays zu verwalten, und zwar immer wieder. Das ist C, nicht C++.

Wenn du das machst, um C++ zu lernen: Brich es ab, es ist die Mühe nicht wert. Kauf dir das C++-Buch von Ulrich Breymann und fang nochmal von vorne an.

Wenn du es machen musst, um einen Schein zu kriegen: Beiß die Zähne zusammen, tu dich mit Mitschülern zusammen, um die Aufgaben mit kleinem Aufwand zu lösen, aber versuch, dir das Zeug nicht anzueignen - es ist einfach nur Scheiße. Kein vernünftiger Mensch programmiert heutzutage so.

Solltest du den Plan haben, damit im Vorstellungsgespräch zu punkten: Lass es lieber. Teams, die gute C++-Leute suchen, nehmen dich damit nicht. In Teams, die genau so arbeiten, willst du nicht rein, die beschäftigen sich nämlich den Großteil ihrer Zeit mit hausgemachten Problemen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
22.07.2018, 14:21 Uhr
Power33



Hatte gar nicht mehr mit Hilfe gerechnet .

Stecke jetzt bei einem anderen Problem fest:

C++:



#include<iostream>
using namespace std;
#include"CDrawing.h"

CDrawing::CDrawing(int initialSize){

    m_arraySize = initialSize;


if(m_arraySize < 1){

    m_arraySize = 10;


}


    m_rectangles = new CRectangle [m_arraySize];



}

CDrawing::~CDrawing(){

    delete [] m_rectangles;
}

void CDrawing::add(const CRectangle& rectangle){

if(m_nextFree == m_arraySize ){

    int m_newSize = m_arraySize*2;
    CRectangle* newRectangle = new CRectangle [ m_newSize];

    for(int i = 0; i<(m_newSize);i++){

        newRectangle[i] = m_rectangles[i];

    }
    delete[] m_rectangles;
    m_rectangles = newRectangle;

    m_arraySize = m_newSize;

}

m_rectangles[m_nextFree] = rectangle;
m_nextFree++;

if(m_arraySize < 100){
    m_newSize = m_arraySize*2;
}

else{
    m_newSize = m_arraySize+100;
}


}


















Implementieren Sie die add Methode. Das als Parameter übergebene Rechteck soll dabei an die nächste freie Position des Array geschrieben werden. Falls kein freier Speicherplatz im Array mehr vorhanden ist, soll das Array auf die doppelte Größe vergrößert werden sofern es weniger als 100 Elemente enthält. Enthält es 100 oder mehr Elemente, wird es (wenn zusätzlicher Platz gebraucht wird) nur noch um 100 weitere Elemente vergrößert.


Hier scheint es aber fehler zu geben

if(m_arraySize < 100){
m_newSize = m_arraySize*2;
}

else{
m_newSize = m_arraySize+100;
}


}
Bitte um Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
22.07.2018, 15:18 Uhr
ao

(Operator)


Was für Fehler scheint es denn zu geben? Tut mir leid, aber meine Wahrsagekugel funktioniert nur bis 25°C.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.07.2018, 15:25 Uhr
Power33



Jetzt sind die Fehler weg .
Aber passt der code so ao?



C++:
void CDrawing::add(const CRectangle& rectangle){
    
    int m_newSize = m_arraySize*2;
    CRectangle* newRectangle = new CRectangle [ m_newSize];

if(m_nextFree == m_arraySize ){

    for(int i = 0; i<(m_newSize);i++){

        newRectangle[i] = m_rectangles[i];

    }
    
    delete[] m_rectangles;
    m_rectangles = newRectangle;

    m_arraySize = m_newSize;

}

     m_rectangles[m_nextFree] = rectangle;
     m_nextFree++;

if(m_arraySize < 100){
    
    m_newSize = m_arraySize*2;
}

else{
    
    m_newSize = m_arraySize+100;
}


}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: