Forum: PC-Programmierung Klasse Complex


von Hans (Gast)


Lesenswert?

Die alte Aufgabe lautet:
Implementieren Sie eine Klasse Complex, welche komplexe Zahlen z in 
kartesischer Form, d.h. z=a+i*b darstellt. Speichern Sie hierfür Real- 
und Imaginärteil jeweils als private Membervariablen, für die Sie einen 
geeignenten Datentyp verwenden. Sämtliche Methoden, welche die Klasse 
zur Verfügung stellt, sollenn public deklariert sein.
i) Schreiben Sie einen Konstruktor, welcher Werte für Real- und 
Imaginärteil übergeben bekommt.


Ok, da weiss ich schon nicht so richtig weiter.
1
#include<iostream>
2
class Complex {
3
public:
4
private:
5
double im;
6
double re;
7
Complex(double im, double re);
8
};
Was sagt ihr dazu? Wär das jetzt schon alles?

ii) Implementieren Sie eine Funktion print, die ein Complex-Objekt in 
einer geeigneten Form auf der Konsole ausgibt. Testen Sie Konstruktor 
und Ausgabefunktion an einigen Beispielen in einer main-Methode.

Da warte ich erstmal lieber die Kommentare zu i) ab :-)

LG :-)

: Bearbeitet durch User
von operator (Gast)


Lesenswert?

Hans schrieb:
> Da warte ich erstmal lieber die Kommentare zu i) ab :-)

Dein Constructor ist private

von Hans (Gast)


Lesenswert?

Ok, also dann einfach nur:
1
#include<iostream>
2
class Complex {
3
4
public:
5
Complex(double im, double re);
6
7
private:
8
double im;
9
double re;
10
11
};

: Bearbeitet durch User
von operator (Gast)


Lesenswert?

Ja und bevor du nun noch Kommentare zu Aufgabe ii) abwartest solltest du 
lieber:

Hans schrieb:
> Testen Sie Konstruktor
> und Ausgabefunktion an einigen Beispielen in einer main-Methode.

von Hans (Gast)


Lesenswert?

Nur das scheint irgendwie der Knackpunkt zu sein, da ich nicht so 
richtig weiss, wie man das machen soll..

Ok, ich habe bis jetzt erstmal geschrieben:
1
#include<iostream>
2
class Complex {
3
public:
4
Complex(double re, double im);
5
void print();
6
private:
7
double re;
8
double im;
9
};
10
11
void Complex::print() {
12
cout << re << "+*i" << im << endl;
13
}
14
15
int main()
16
{
17
//Schwierig - als erstes würde ich ein Complex Objekt definieren
18
Complex A;
19
//Da macht das Programm schon nicht mit (Begründung: Für Klasse Complex kein Standardkonstruktor vorhanden). Wie geht man das jetzt am besten an? 
20
21
}
LG

: Bearbeitet durch User
von Halbmarathonnichtläufer (Gast)


Lesenswert?

Welche Parameter hat denn der Konstruktor?

Complex A;

Gar keine? Kann offenbar nicht stimmen.

von U=R*I (Gast)


Lesenswert?

@Hans
Tu uns bitte den Gefallen und verwende die C-Formatierung
1
[c]C-Code[/c]

von Hans (Gast)


Lesenswert?

Stimmt, super!

int main()
{
Complex A(double re, double im) //Complex Objekt definieren

//Nur wie kann man denn jetzt die genauen Werte festsetzen, da ja doch 
eine Zahl angezeigt werden soll




}

von TriHexagon (Gast)


Lesenswert?

Ich sehe hier nur die Deklaration des Konstruktors, aber keine 
Definition...

von Karl H. (kbuchegg)


Lesenswert?

Hans schrieb:
> Stimmt, super!
>
> int main()
> {
> Complex A(double re, double im) //Complex Objekt definieren
>
> //Nur wie kann man denn jetzt die genauen Werte festsetzen, da ja doch
> eine Zahl angezeigt werden soll

Indem du beim Erzeugen des Objekts die Zahlen mitgibst, die der 
Konstruktor übernehmen soll?

Irgendwie ist bei dir der Wurm drinn. Auf der einen Seite sollst du 
Dinge machen, aber auf der anderen Seite fehlen dir grundlegende Dinge 
wie die Unterscheidung dessen, das eine Funktion aufgerufen wird und es 
daher einen Aufrufer geben muss, der in diesem Fall eben darin besteht, 
dass man eine Variable von diesem Typ definiert, wodurch automatisch der 
Konstruktor aufgerufen wird. Der Aufrufer gibt die Werte mit, die 
innerhalb der Funktion dann eben in den im Funktionskopf angegebenen 
Parameter-Variablen landen auf das die Funktion damit arbeiten kann. 
Insofern unterscheidet sich das Grundprinzip nicht von jedem anderen 
Funktionsaufruf. Einziger Unterschied: Du schreibst den Aufruf des 
Konstruktors nicht explizit als Funktionsaufruf hin, sondern er wird 
automatisch immer aufgerufen sobald ein Objekt zur Welt kommt. Man 
könnte also sagen: Die Definition der Variable fungiert quasi (unter 
anderem) als Funktionsaufruf der Konstruktor-Funktion.
1
int main()
2
{
3
  Complex A( 5.0, 4.0 );
4
5
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Gewöhn dir im übrigen gleich von Anfang an eine ordentliche äussere Form 
an. Einfach alles an den linken Zeilenrand zu klatschen ist keine 
äussere Form. Einrückungen haben ihren Sinn! Man sieht logische 
Zusammenhänge viel besser.
1
#include<iostream>
2
3
class Complex {
4
public:
5
  Complex(double re, double im);
6
  void print();
7
8
private:
9
  double re;
10
  double im;
11
};
12
13
void Complex::print() {
14
  cout << re << "+*i" << im << endl;
15
}

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Und PS: Aus Sicht der Klasse ist ein Construktor eine Funktion (fast) 
wie alle anderen Member Funktionen auch. Wenn du also in der 
Klassendefinition versprichst ...
1
class Complex {
2
3
public:
4
  Complex(double re, double im);
5
...
dass es eine derartige Funktion gibt, dann musst du die auch schreiben!
1
Complex::Complex( double re, double im )
2
{
3
  this->re = re;
4
  this->im = im;
5
}

(Für C++ Kenner: Ich hab jetzt bewusst auf Initialisierungslisten 
verzichtet, der TO hat ganz offenbar noch viel primitivere 
Verständnisprobleme)

von Halbärmeliger (Gast)


Lesenswert?

Ach, die Deklaration war der ganze Code? Ok, damit hatte ich nicht 
gerechnet ...

@Hans
Das bringt nichts, glaube ich. Investiere wenigstens mal einen 
Nachmittag und arbeite ein Tutorial durch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.