Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Programmierung 2 (http://www.informatikerboard.de/board/thread.php?threadid=3686)


Geschrieben von Victor am 07.09.2017 um 23:57:

 

Ah jetzt peile ich es .

Ich hätte einfach in der Klasse Cpoint gucken müssen großes Grinsen

public:
/**
* Erzeugt ein neues Objekt mit den angegeben
* Werten f�r die x- und y-Koordinate.
*/
CPoint(int x = 0, int y = 0);



Geschrieben von Victor am 08.09.2017 um 00:00:

 

code:
1:
CRectangle rectangle1; rectangle1.Cpoint(5,5);


So geht das nicht ?

Wie meinst du es genau oben ?



Geschrieben von Victor am 08.09.2017 um 00:09:

 

OMG habe es jetzt großes Grinsen

code:
1:
int main (void) { // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl; CRectangle rectangle1; CRectangle rectangle1 = CRectangle rectangle1( CPoint(5, 5), CPoint(25, 15)); return 0; }



Geschrieben von Victor am 08.09.2017 um 00:10:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
int main (void)
{
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
	cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
	CRectangle rectangle1;
	CRectangle rectangle1 = CRectangle rectangle1( CPoint(5, 5), CPoint(25, 15));




	return 0;
}




Geschrieben von Victor am 08.09.2017 um 00:17:

 

Mit einem leeren () wird Füllzeichen ausgegeben ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

int main (void)
{
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
	cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl ;
	CRectangle rectangle1;
	 CRectangle rectangle1( CPoint(5, 5), CPoint(25, 15));
	 CRectangle rectangle1();




	return 0;
}



Geschrieben von as_string am 08.09.2017 um 00:22:

 

Nimm einfach Zeile 6



Geschrieben von as_string am 08.09.2017 um 00:23:

 

So z. B.:
code:
1:
2:
3:
4:
5:
int main() {
	CRectangle rect1(CPoint(5, 5), CPoint(25, 15));
	cout << rect1 << endl;
	return 0;
}



Geschrieben von Victor am 08.09.2017 um 00:25:

 

Für das Füllzeichem muss ich doch einen anderen Konstruktor aufrufen oder ?

Diesen:

CRectangle::CRectangle(char fillChar)

{
m_fillChar = fillChar;}

Wieso einfach Zeile 6 ?



Geschrieben von as_string am 08.09.2017 um 00:28:

 

Wenn Du ein Rechteck-Objekt erstellen wolltest, bei dem Du nur das Füllzeichen anders festlegst als der Standard "#", dann könntest Du diesen Konstruktor verwenden.
Aber Du willst doch nur ein Rechteck mit den beiden Ecken konstruieren und nicht eines mit einem Füllzeichen, oder?



Geschrieben von Victor am 08.09.2017 um 00:32:

 

Ich habe zu erst mal eine frage .

Rufst du da oben in der main diesen Konstruktor auf?

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());
}
}


Ich dachte du rufst das hier von der CPOint Klasse auf?
CPoint(int x = 0, int y = 0);

Das muss mir zuerst klar werden ?

Cpoint hat ja kein Füllzeichen oder doch?



Geschrieben von Victor am 08.09.2017 um 00:33:

 

In der Aufgabe steht doch und dem Füllzeichen ?



Geschrieben von as_string am 08.09.2017 um 00:34:

 

Vielleicht nochmal anders:
Wenn Du ein Objekt vom Typ CRectangle machen willst, dann rufst Du dafür den Konstruktor nur einmal auf, und zwar indem Du
code:
1:
CRectangle var_name(Argumente für den Konstruktor);
schreibst. Dabei können die Argumente einem der deklarierten Konstruktoren entsprechen.
Wenn Du das für die Variable var_name einmal gemacht hast, dann verwendest Du nie wieder einen Konstruktor für diese Variable. Die ist ja jetzt schon da, da wird nichts mehr neues dann konstruiert.
Wenn Du was am vorhandenen Objekt var_name später ändern willst (also nicht neu machen sondern ändern!), dann verwendest Du z. B. die setter-Methoden.
Aber bei der g) willst Du nichts an einem Objekt ändern, sondern nur eines erstellen mit den Eckpunkten (5,5) und (25,15) und dem Füllzeichen '#', mehr nicht!



Geschrieben von as_string am 08.09.2017 um 00:36:

 

Erstens ist das Füllzeichen schon als Default auf '#' gesetzt und zweitens sollst Du alles drei in einem Objekt haben, sowohl die beiden Eckpunkte als auch das Füllzeichen. Wenn Du explizit ein Füllzeichen angeben willst (was Du hier nicht musst, weil es der Default ist), dann nimm den Konstruktor mit drei Argumenten!



Geschrieben von Victor am 08.09.2017 um 00:37:

 

Ja aber Rectangle hat ja 2 Konstruktoren .

Hast du also das aufgerufen?

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());
}
}

Kann ja nicht sein ,da ja dieser Konstruktor keine x und y Koordinate hat ?



Geschrieben von as_string am 08.09.2017 um 00:45:

 

x und y??? Nein, x und y ist doch gar kein Member von CRectangle sondern von CPoint! Warum sollte es dann einen Konstruktor mit x und y für das Rechteck geben.

Nochmal: CRectangle hat einen Konstruktor mit zwei CPoint Objekten und einem Char als Füllzeichen. Letzteres ist mit dem "fillChar = '#'" in der Headerdatei auf einen Defaultwert gesetzt.
Wenn Du also nur zwei CPoint in einem Konstruktor angibst, wird automatisch fillChar mit dem Defaultwert belegt. Du hast damit also eigentlich direkt zwei verschiedene Konstruktoren, einen mit zwei CPoint Objekten und einen mit zwei CPoint-Objekten und einem Char.
Außerdem gibt es noch einen eigenen Konstruktor ohne CPoint Objekte aber mit einem (optionalen, weil auch hier ein Default angegeben ist) Füllzeichen.

Ich verwende aber noch den Konstruktor CPoint(x, y), um zwei CPoint-Objekte anzugeben, die ich direkt dem Konstruktor von CRectangle übergebe.
Du könntest auch explizit erst zwei CPoint-Objekte machen und damit das Rechteck konstruieren, etwa so:
code:
1:
2:
3:
4:
5:
6:
7:
int main() {
	CPoint bl(5, 5);
	CPoint tr(25, 15);
	CRectangle rect1(bl, tr);
	cout << rect1 << endl;
	return 0;
}

Vielleicht macht es das klarer?


Forensoftware: Burning Board, entwickelt von WoltLab GmbH