Hallo zusammen,
ich lerne gerade Qt, mithilfe des Buches An Introduction to Design Patterns in C++ with Qt (Prentice Hall Open Source Software Development), da dort die direkte Verbindung von c++ und qt beigebracht wird.
Außerdem hat es am Ende der Kapitel immer Übungen, so dass ich den Lerneffekt direkt messen kann.
Suboptimal ist, dass die Autoren bei den ersten Übungen keine Lösungen angeben. Dies ändert sich im Laufe des Buches, bzw. sind diese auf ihrer Internet Seite abrufbar. Allerdings nicht bei dem folgenden Problem, bei welchem ich nicht durchsteige.
Hier die Aufgabe:
Given the UML diagram in Figure 2.5 , define the class, and each member
function specified, for an enhanced Fraction class.
Write some client code to test all the new operations and verify that proper
calculations are done.
also die ersten drei Klassenmethoden stellt kein Problem dar (set, toString, toDouble). Allerdings bekomme ich die Klassenmethode add nicht hin (die folgenden auch nicht, aber die würden ja genauso gehen) bzw. weiß nicht genau, was diese genau darstellt (Konstruktor, ein Conversion oder was auch immer ).
Wenn ich so vorgehen will, wie in dem UML Diagramm dargestellt, schaff ich es nicht diese zu implementieren.
Weiterhin ist mir auch nicht klar, wie ich diese aufrufe, um das Ergebnis der Addition auf dem Bildschirm auszugeben.
Ich hoffe, jemand kann mir helfen
Wenn irgendwelche weitere Informationen gebraucht werden, stelle ich diese gerne zur Verfügung.
Schon mal vielen Dank.
Gruß
Patrick
Implementierungschwierigkeiten einer Klassenmethode
Re: Implementierungschwierigkeiten einer Klassenmethode
Also wenn ich das UML Diagramm richtig verstanden habe, sollst du eine Klasse Bruch erstellen,
in welche ein Nenner und Zähler als int Member initialisiert werden soll.
Sprich es handelt sich um eine einfache mathematischen Aufgabe z.B add sollte wie folgt aussehen
die Funktion gibt einen Klasse mit den geänderten Werten (in diesem Fall die eigene) zurück und bekommt
eine andere Klasse als unveränderbares Objekt zur Berechnung übergeben. Das & hinter dem Funktionsnamen
bitte nicht mit den direkten Zugriffsoperator verwechseln, es sagt nur aus das ein private Konstruktor für eine
Originalvorlage sorgt.
Deine add Methode ist also recht simple
that´s about it dude
Gruß
Mr.Crank
in welche ein Nenner und Zähler als int Member initialisiert werden soll.
Sprich es handelt sich um eine einfache mathematischen Aufgabe z.B add sollte wie folgt aussehen
Code: Alles auswählen
Fraction::Fraction& add (const Fraction& origFractA)
eine andere Klasse als unveränderbares Objekt zur Berechnung übergeben. Das & hinter dem Funktionsnamen
bitte nicht mit den direkten Zugriffsoperator verwechseln, es sagt nur aus das ein private Konstruktor für eine
Originalvorlage sorgt.
Deine add Methode ist also recht simple
Code: Alles auswählen
Fraction::Fraction& add (const Fraction& origFractA)
{
//Überkreuzmethode ;)
m_Numerator=m_Numerator*origFractA.m_Denominator+m_Denominator*origFractA.m_Numerator;
m_Denominator=m_Denominator*origFractA.m_Denominator;
return *this;
}
Gruß
Mr.Crank
Re: Implementierungschwierigkeiten einer Klassenmethode
Hallo Mr. Crank,
vielen Dank für die Antwort, die qt SDK motzt nicht mehr .
Allerdings komme ich nicht klar, wie ich diese aufrufen soll, um die Addition zu überprüfen.
ich dachte an
was aber nicht klappt (auch verschiedene Werte in der Klammer haben nicht funktioniert).
Vielen Dank für die Hilfe.
Gruß
Patrick
vielen Dank für die Antwort, die qt SDK motzt nicht mehr .
Allerdings komme ich nicht klar, wie ich diese aufrufen soll, um die Addition zu überprüfen.
ich dachte an
Code: Alles auswählen
int main() {
QTextStream cout(stdout);
Fraction f1;
f1.set(3, 4);
cout << "\nDie Fraktion ist: " << f1.toString() << endl;
cout << "Die Fraktion als double: " << f1.toDouble() << endl;
cout << "Die Fraktion addiert: " << f1.add() << endl;
}
was aber nicht klappt (auch verschiedene Werte in der Klammer haben nicht funktioniert).
Vielen Dank für die Hilfe.
Gruß
Patrick
Re: Implementierungschwierigkeiten einer Klassenmethode
Tach Patrick ,
sorry für das späte Antworten, falls es noch akut ist hier mal meine Überlegung nach
dem ersten Kaffee was haut der Compiler denn für eine Meldung raus ? (immer mit bei schreiben)
Wenn ich jetzt nach dem Wochenende noch alles richtig im Kopf habe,
musst du 2 Objekte erzeugen damit du überhaupt etwas zum addieren hast.
D.h.
Fraction f1,f2;
f1.set(1, 2);
f2.set(1, 2);
deine Addition war jetzt so ausgelegt das das original bzw. die eine Fraktion
mit den Werten der anderen bearbeitet wird. Also müsste dein Funktionsaufruf
wie folgt aussehen
So sollte es klappen geht auch in weniger Zeilen, aber für den Anfang ist es
so definitiv besser
Gruß Mr.Crank
sorry für das späte Antworten, falls es noch akut ist hier mal meine Überlegung nach
dem ersten Kaffee was haut der Compiler denn für eine Meldung raus ? (immer mit bei schreiben)
Wenn ich jetzt nach dem Wochenende noch alles richtig im Kopf habe,
musst du 2 Objekte erzeugen damit du überhaupt etwas zum addieren hast.
D.h.
Fraction f1,f2;
f1.set(1, 2);
f2.set(1, 2);
deine Addition war jetzt so ausgelegt das das original bzw. die eine Fraktion
mit den Werten der anderen bearbeitet wird. Also müsste dein Funktionsaufruf
wie folgt aussehen
Code: Alles auswählen
int main() {
QTextStream cout(stdout);
Fraction f1,f2;
f1.set(1, 2);
f2.set(1, 2);
cout << "\nDie Fraktion ist: " << f1.toString() << endl;
cout << "Die Fraktion als double: " << f1.toDouble() << endl;
//Hier der Funktionsaufruf zur Addition von f1 mit f2
f1.add(f2);
//Jetzt müsste der der Wert von f1 verändert sein und hier 1 ergeben
cout << "Die Fraktion addiert mit " << f2.toDouble() <<"ergibt:"<<f1.toDouble()<< endl;
}
so definitiv besser
Gruß Mr.Crank