Mit Operatoren überladen ist gemeint, wenn man die Funktionsweise von z.B. der +
-Funktion für seine Klasse anpasst um sie so intuitiver nutzbar zu machen.
tBruch Bruch;
Bruch = Bruch + 5;
new + % ~ > /= |= <<= >= -- ()
delete - ^ ! += %= << == && , []
new[] * & = -= ^= >> != || ->*
delete[] / | < *= &= >>= <= ++ ->
class tBruch
{
public:
tBruch() {zaehler=0; nenner=1;}
int GetNenner() {return nenner;}
int GetZaehler() {return zaehler;}
void SetNenner(int p) {if (p!=0) nenner=p;}
void SetZaehler(int p) {zaehler=p;}
void Addiere(int);
void Addiere(tBruch);
void Show();
private:
int zaehler;
int nenner;
};
void tBruch::Addiere(int summand)
{
zaehler+=summand*nenner;
}
void tBruch::Addiere(tBruch summand)
{
zaehler = zaehler*summand.GetNenner()
+ summand.GetZaehler()*nenner;
nenner = nenner * summand.GetNenner();
}
class tBruch
{
public:
tBruch() {zaehler=0; nenner=1;}
int GetNenner() {return nenner;}
int GetZaehler() {return zaehler;}
void SetNenner(int p) {if (p!=0) nenner=p;}
void SetZaehler(int p) {zaehler=p;}
tBruch operator+(int);
tBruch operator+(tBruch);
void Show();
private:
int zaehler;
int nenner;
};
tBruch tBruch::operator+(int summand)
{
zaehler+=summand*nenner;
return *this; // gibt Zeiger zurück
}
tBruch tBruch::operator+(tBruch summand)
{
zaehler = zaehler*summand.GetNenner()
+ summand.GetZaehler()*nenner;
nenner = nenner * summand.GetNenner();
return *this;
}
tBruch Summe, Summand1, Summand2;
Summe = Summand1.operator+(Summand2);
Summe = Summand1 + Summand2; // identisch zu .operator+
class tBruch
{
tBruch& operator++(); // Präfix
tBruch operator++(int); // Postfix
...
};
tBruch& tBruch::operator++()
// Praefix-Inkrement
{
// berechne den neuen Bruch
// geht auch: *this = *this + 1;
zaehler += nenner;
return *this;
}
tBruch tBruch::operator++(int)
// Postfix-Inkrement
{
tBruch oldBruch =*this; // alten Stand sichern
zaehler += nenner; // Variable erhöhen
return oldBruch; // return alten Stand
}
// Gleichheitsoperator (kleiner/größer analog)
bool tBruch::operator==(tBruch vgl)
{
kuerze();
vgl.kuerze();
return (zaehler==vgl.zaehler && nenner==vgl.nenner);
}
// Ungleichheit
class tBruch
{
...
bool operator==(tBruch op2);
bool operator!=(tBruch op2)
{
return !(*this == op2);
}
...
};
=
Zuweisungsoperator()
Funktionsaufruf[]
Index->
Zeigeroperator
tBruch tBruch::operator+(int summand); // globale Funktion
tBruch Buch;
Bruch = Bruch.operator+(5); // Aufruf
Bruch = Bruch + 5; // Aufruf (Alternative)
friend
-Methode helfen
class tBruch
{
...
// die globale Funktion operator+ darf auf
// Elementvariablen zugreifen
friend tBruch operator+(int o1, const tBruch& o2);
...
};
tBruch operator+(int o1, const tBruch& o2)
{
tBruch summe;
summe.zaehler = o2.zaehler+o1*o2.nenner;
summe.nenner = o2.nenner;
return summe;
}
Weitere Informationen: http://www.willemer.de/informatik/cpp/cppovrld.htm