Operatoren überladen
-
Wer kann mir helfen!!!
Ich steig überhaupt nicht durch, was der Code eigentlich machtAlso der war fast so vorgegeben, ich musste die Multiplikation u. die Division einbauen,
aber ich kann die Rechnungen nicht nachvollziehen#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <iostream.h> #include <graph.h> #define BIL _clearscreen(_GCLEARSCREEN); /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Definition der Klasse 'Bruchzahl' */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ class Bruchzahl { private: int zaehler; int nenner; // Darf nie 0 sein. public: Bruchzahl(); // Konstruktor 1 Bruchzahl(int z, int n=1); // Konstruktor 2 Bruchzahl operator + (Bruchzahl& B1); Bruchzahl operator - (Bruchzahl& B1); Bruchzahl operator * (Bruchzahl& B1); Bruchzahl operator / (Bruchzahl& B1); void Print(); }; /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Hauptfunktion */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ int main() { Bruchzahl BZahl1(3,4), // Bruchzahl = 3/4. BZahl2(3,2), // Bruchzahl = 3/2. BZahl3; // Nicht vorbelegt, also 0/1. BIL; // Bildschirm loeschen. cout << "\n\nVor der Addition\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); BZahl3 = BZahl1 + BZahl2; cout << "Nach der Addition\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); cout << "\n\nVor der Subtraktion\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); BZahl3 = BZahl1 - BZahl2; cout << "Nach der Subtraktion\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); cout << "\n\nVor der Multiplikation\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); BZahl3 = BZahl1 * BZahl2; cout << "Nach der Multiplikation\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); cout << "\n\nVor der Division\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); BZahl3 = BZahl1 / BZahl2; cout << "Nach der Division\n"; BZahl1.Print(); BZahl2.Print(); BZahl3.Print(); getch(); return(0); } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Konstruktor 1 */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl::Bruchzahl() { zaehler = 0; nenner = 1; }; /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Konstruktor 2 */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl::Bruchzahl(int z, int n) { zaehler = z; nenner = n; }; /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Addieren von zwei Bruchzahlen */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl Bruchzahl::operator + (Bruchzahl& BZ) { Bruchzahl Ergebnis; Ergebnis.zaehler = zaehler * BZ.nenner + BZ.zaehler * nenner; Ergebnis.nenner = nenner * BZ.nenner; if( Ergebnis.nenner == 0 ) Ergebnis.nenner = 1; return Ergebnis; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Subtrahieren von zwei Bruchzahlen */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl Bruchzahl::operator - (Bruchzahl& BZ) { Bruchzahl Ergebnis; Ergebnis.zaehler = zaehler * BZ.nenner - BZ.zaehler * nenner; Ergebnis.nenner = nenner * BZ.nenner; if( Ergebnis.nenner == 0 ) Ergebnis.nenner = 1; return Ergebnis; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /*Multiplikation von zwei Bruchzahlen */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl Bruchzahl::operator * (Bruchzahl& BZ) { Bruchzahl Ergebnis; Ergebnis.zaehler = zaehler * BZ.nenner * BZ.zaehler * nenner; Ergebnis.nenner = nenner * BZ.nenner; if( Ergebnis.nenner == 0 ) Ergebnis.nenner = 1; return Ergebnis; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /*Division von zwei Bruchzahlen */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ Bruchzahl Bruchzahl::operator / (Bruchzahl& BZ) { Bruchzahl Ergebnis; Ergebnis.zaehler = zaehler * BZ.nenner / BZ.zaehler * nenner; Ergebnis.nenner = nenner * BZ.nenner; if( Ergebnis.nenner == 0 ) Ergebnis.nenner = 1; return Ergebnis; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ /* Ausgeben einer Bruchzahl */ /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ void Bruchzahl::Print() { cout << zaehler << "/" << nenner << "\n"; }/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/
-
Hallo Renate,
Hast Du Fragen zum Bruchrechnen (Mathe-Forum ist hier) oder weißt Du nicht was der Code macht.
Mein Vorschlag für Multiplikation und Division istBruchzahl Bruchzahl::operator * (const Bruchzahl& BZ) const { return Bruchzahl( zaehler * BZ.zaehler, nenner * BZ.nenner ); } Bruchzahl Bruchzahl::operator / (const Bruchzahl& BZ) const { return Bruchzahl( zaehler * BZ.nenner, nenner * BZ.zaehler ); }Gruß
Werner
-
ich weiß nicht was der code macht, ich kann die Rechung nicht nachvollziehen

-
Renate schrieb:
ich weiß nicht was der code macht, ich kann die Rechung nicht nachvollziehen

Versuch' ich's mal. Der Konstruktor
Bruchzahl(int z, int n=1)erzeugt einen Bruch - also zum Beispiel
Bruchzahl b1(3,4);entspräche .
Eine Multiplikation von zwei Objekten schreibt man in C++Bruchzahl b1; Bruchzahl b2; Bruchzahl b3 = b1 * b2;Damit das funktioniert, benötigt Bruchzahl einen binären operator*. Die Syntax steht in Deinem Code (fast)
class Bruchzahl { public: Bruchzahl operator*( const Bruchzahl& b2 ) const; private: int zaehler; int nenner; };const vor b2 deshalb, weil der zweite Operand nicht verändert wird. Und const hinter der Methode weil der erste Operand auch nicht verändert wird.
Die Multiplikation von zwei Brüchen geht bekanntermaßen so:
\frac{a}{b}*\frac{c}{d}=\frac{a\*c}{b\*d}
In C++ wiederum ist diese Methode
Bruchzahl Bruchzahl::operator*( const Bruchzahl& b2 ) const { return Bruchzahl( zaehler * b2.zaehler, nenner * b2.nenner ); }eine Methode, die vom Objekt 'b1' (s.o.) aufgerufen wird und 'b2' (s.o.) wird übergeben. Es wird ein neuer Bruch erzeugt (das Ergebnis) und dies wird genau so gebildet wie in der Formel oben.
Alles klar?
Gruß
Werner