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
classComplex{
3
public:
4
private:
5
doubleim;
6
doublere;
7
Complex(doubleim,doublere);
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 :-)
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.
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
}
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.
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.
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
classComplex{
2
3
public:
4
Complex(doublere,doubleim);
5
...
dass es eine derartige Funktion gibt, dann musst du die auch schreiben!
1
Complex::Complex(doublere,doubleim)
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)
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.
Eine eigene Frage?
Dieser Thread ist über 11 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.