Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

19.09.2005, 14:32

Vorgabe Programm - Lösung?

Hallo,
ich habe in einem Internetskript folgende Übung gefunden, Mich würde mal interessieren, wie die Lösung ausschauen könnte. Und zwar ist folgendes vorgegeben:


#include #include using namespace std;class Punkt { public: Punkt(double,double,double); //Konstruktor für x,y und z friend void anzeigen(ostream os, const Punkt&); // Anzeige double betrag(); // Länge des Ortsvektors (Betrag)Punkt& Punkt::operator+=(const Punkt& b);private:double x,y,z; //Koordinaten};void main(){Punkt P1(3,4,0), P2(0,0,3);cout << P1.betrag() << endl;anzeigen(cout, P1);P1 += P2;anzeigen(cout, P1);}

Man soll hier einen Konstruktor der Klasse Punkt implementieren und zwar über eine Initialisierungsliste (Allgemeiner Konstruktor). Zudem implementieren der Elementfunktion betrag(), überladen des Operators += und erstellen der friend Funktion anzeigen().

Noch etwas: Mich würde mal interessieren, was das "anzeigen(ostream os, const Punkt&); " bedeutet bzw. das "ostream os" und weshalb hier eine Referenz erwartet wird.

Danke im voraus!

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

19.09.2005, 15:19

Sorry, aber Du glaubst doch wohl nicht wirklich, dass sich bei solch einer Formatierung des Textes sich hier auch nur ein einziger finden lässt, der sich dem Problem annimmt? Ich mache es trotzdem, aber nur, weil mir langweilig ist...

C-/C++-Quelltext

1
2
3
4
Punkt::Punkt(double x, double y, double z) : x(x), y(y), z(z) { }
double Punkt::betrag() { return sqrt(x*x + y*y + z*z); }
Punkt& Punkt::operator += (const Punkt& b) { x += b.x; y += b.y; z += b.z; return *this; }
void Punkt::anzeigen(ostream os, const Punkt& b) { os << "(" << b.x << ", " << b.y << ", " << b.z << ")" << endl; }


In etwa so könnte es aussehen, muss es aber nicht.
ostream os ist einfach nur der Output-Stream, über den die Anzeige erfolgen soll. Der Punkt wird als Referenz übergeben, da es performanter ist, als das Objekt zu kopieren (zumal es weder Kopierkonstruktor noch =-Operator gibt).

Anonymous

unregistriert

3

19.09.2005, 15:29

Oh, sorry, nochmal die richtige Formatierung:



Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>

using namespace std;

class Punkt {  
public:    
    Punkt(double,double,double); //Konstruktor für x,y und z     
    friend void anzeigen(ostream os, const Punkt&); // Anzeige     
    double betrag(); // Länge des Ortsvektors (Betrag)
    Punkt& Punkt::operator+=(const Punkt& b);

private:
    double x,y,z; //Koordinaten
};
void main()
{
    Punkt P1(3,4,0), P2(0,0,3);
    cout << P1.betrag() << endl;
    anzeigen(cout, P1);
    P1 += P2;anzeigen(cout, P1);
}

Anonymous

unregistriert

4

19.09.2005, 15:48

Ich bekomm übrigens immer die Fehlermeldung, dass anzeigen keine Member der Klasse Punkt ist.

Anonymous

unregistriert

5

19.09.2005, 16:16

Fehler war statt Punkt::anzeigen nur void anzeigen(),
wegen dem friend vor der Funktion in der Klasse.

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

6

20.09.2005, 11:39

Zitat

friend void anzeigen(ostream os, const Punkt&);

ostream als referenz übergeben.
Why is 6 afraid of 7?
Because 7 8 9

Werbeanzeige