Konstruktoren

mostwanted90

Grünschnabel
Hallo alle zusammen.

Ich habe da ein Problem. Ich soll ein Programm schreiben mit folgender main funktion:

CBruch Ergebnis;

CBruch a(1,2);
CBruch b(1,3);
CBruch c(2,7);
CBruch d(7,3);
CBruch f;

bool bTest1 = (a==b);
bool bTest2 = (a != 3);


Ergebnis += a;
Ergebnis -= a;
Ergebnis *= a;
Ergebnis /= a;

Ergebnis = 2 + a;
Ergebnis = a + 2;
Ergebnis = 2 - b;
Ergebnis = b - 2;
Ergebnis = 2 *c;
Ergebnis = c * 2;
Ergebnis = 2 / c;
Ergebnis = c / 2;

f++;
--f;
Ergebnis =((a+ b - 1) * c) /2 - d;
cout<<"Bruch:";
Ergebnis.Ausgabe();


Aufgaben Stellung:
Es soll der folgende Programmteil compiliert werden können und das Ergebnis ausgerechnet werden (Ergebnis= -33/14).
Es handelt sich um Brüche a(Zaehler,Nenner)

Ich soll dazu den rest ergänzen hab aber keine Ahnung wie ich das machen soll.
Bei :google: hab ich nichts gefunden.

Danke schon einmal im Voraus
 
Nun, offensichtlich sollst Du eine Klasse CBruch erstellen, die einen Standardkonstruktor enthält sowie einen Konstruktor, welcher 2 int-Werte übergeben bekommt. Weiterhin sollen die Vergleichsoperatoren == und != sowie die Zuweisungsoperatoren =, +=, -=, *= und /= und die Rechenoperatoren +, -, * und / mit Integerwerten und die Inkrement- und Dekrementoperatoren (++ und --) als Prefix- und Postfixoperatoren implementiert werden. Zum Schluß braucht die Klasse noch die Funktion void CBruch::Ausgabe().
 
Das denke ich mir mal so:

Die Klasse CBruch gibt ja als Ergebnis einen Bruchwert zurück. Nachdem die Operatoren
+=, -=, *= und /= einfache arithemtische Operatoren sind, sollen diese wolh auch auf den jeweiligen Ergebniswert der Objekte angewandt werden können.

Also so, daß z.B. ein CBruch(3, 4) *= 5 zu einem CBruch(15, 20) führt.
 
In den Zuweisungsoperatoren wird für jedes Daten-Element der Klasse der Wert des rechten Objektes dem Wert des linken Objektes zugewiesen:
Code:
CBruch & CBruch::operator =(const CBruch& rhs)
{
 if(&rhs != this)
 {
  m_Zähler= rhs.m_Zähler;
  m_Nenner = rhs.m_Nenner;
 }
 return *this;
}
Bei den Zuweisungsoperatoren mit vorangestelltem arithmetischen Operator wird erst die Rechenoperation durchgeführt und dann das Ergebnis dem linken Objekt zugewiesen:
Code:
CBruch & CBruch::operator +=(const CBruch& rhs)
{
 m_Zähler += rhs.m_Zähler;
 m_Nenner += rhs.m_Nenner;
 return *this;
}
 
HI.
Das denke ich mir mal so:

Die Klasse CBruch gibt ja als Ergebnis einen Bruchwert zurück. Nachdem die Operatoren
+=, -=, *= und /= einfache arithemtische Operatoren sind, sollen diese wolh auch auf den jeweiligen Ergebniswert der Objekte angewandt werden können.

Also so, daß z.B. ein CBruch(3, 4) *= 5 zu einem CBruch(15, 20) führt.
3/4 * 5 sind aber eher 15/4.

Gruß
 
@necromancer:
Das ist dann aber nicht ganz richtig, denn (3/4)*5 ist nicht 15/20 sondern 15/4, da bei einer Multiplikation einer Zahl mit einem Bruch die Zahl nur mit dem Zähler multiplizierrt wird.

Die Division ist dann die Multiplikation mit dem Kehrwert der Zahl.
Schwieriger wird es schon bei einer Addition. (3/4)+5 müßte dann wohl umgerechnet werden in (3/4)+(20/4), was dann (23/4) ergibt.

Für diese Fälle müssen dan extra Operatoren geschrieben werden, die als rechten Wert eine Integerzahl annehmen
Code:
CBruch & CBruch::operator +=(const int& rhs)
{
 m_Zähler += rhs * m_Nenner;
 return *this;
}
 
Da habe ich in meiner ersten Antwort wohl selber Mist gebaut :-(
Ist eben noch etwas früh für mich.

Bei der Addition zweier Brüche müssen natürlich erst die Nenner angepasst werden, erst dann können sie addiert werden:
Code:
CBruch & CBruch::operator +=(const CBruch& rhs)
{
 int iNeuZaehlerL = m_Zaehler * rhs.m_Nenner;
 int iNeuZaehlerR = rhs.m_Zaehler * m_Nenner;
 
 m_Zähler = iNeuZaehlerL + iNeuZaehlerR;
 m_Nenner *= rhs.m_Nenner;
 return *this;
}

EDIT: Das muß natürlich nur dann so gemacht werden, wenn die Nenner unterschiedlich sind. Sind sie gleich, können die Zähler direkt addiert werden.
 
Zuletzt bearbeitet:
Danke für die mathematischen Belehrungen.
Memo an mich: Nicht mit Kamerasteuerungen rumbasteln und gleichzeitig Bruchrechnen versuchen, da liegt kein Segen drauf...
 

Neue Beiträge

Zurück