Implementierungschwierigkeiten einer Klassenmethode

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Pauer
Beiträge: 9
Registriert: 7. Juli 2013 22:25

Implementierungschwierigkeiten einer Klassenmethode

Beitrag von Pauer »

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.


Bild

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 :wink: ).
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 :D
Wenn irgendwelche weitere Informationen gebraucht werden, stelle ich diese gerne zur Verfügung.
Schon mal vielen Dank.

Gruß
Patrick
Mr.Crank
Beiträge: 38
Registriert: 16. April 2013 15:21

Re: Implementierungschwierigkeiten einer Klassenmethode

Beitrag von Mr.Crank »

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

Code: Alles auswählen

Fraction::Fraction& add (const Fraction& origFractA)
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

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;
}
that´s about it dude

Gruß
Mr.Crank
Pauer
Beiträge: 9
Registriert: 7. Juli 2013 22:25

Re: Implementierungschwierigkeiten einer Klassenmethode

Beitrag von Pauer »

Hallo Mr. Crank,

vielen Dank für die Antwort, die qt SDK motzt nicht mehr :D .
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
Mr.Crank
Beiträge: 38
Registriert: 16. April 2013 15:21

Re: Implementierungschwierigkeiten einer Klassenmethode

Beitrag von Mr.Crank »

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

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 sollte es klappen ;) geht auch in weniger Zeilen, aber für den Anfang ist es
so definitiv besser ;)

Gruß Mr.Crank
Antworten