Das folgende Code-Beispiel stammt aus dem Buch
Objektorientiertes Programmieren in C++
- Ein Tutorial für Ein- und Umsteiger
von Nicolai Josuttis, Addison-Wesley München, 2001
© Copyright Nicolai Josuttis 2001
// Headerdatei für min() und abs()
#include <algorithm>
#include <cstdlib>
// Headerdatei der eigenen Klasse einbinden
#include "kbruch.hpp"
// **** BEGINN Namespace Bsp ********************************
namespace Bsp {
/* ggt()
* - größter gemeinsamer Teiler von Zähler und Nenner
*/
unsigned KBruch::ggt () const
{
if (zaehler == 0) {
return nenner;
}
/* Größte Zahl ermitteln, die sowohl Zähler als auch
* Nenner ohne Rest teilt
*/
unsigned teiler = std::min(std::abs(zaehler),nenner);
while (zaehler % teiler != 0 || nenner % teiler != 0) {
teiler--;
}
return teiler;
}
/* kuerzen()
*/
void KBruch::kuerzen ()
{
// falls kürzbar, Zähler und Nenner durch GGT teilen
if (kuerzbar) {
int teiler = ggt();
zaehler /= teiler;
nenner /= teiler;
kuerzbar = false; // damit nicht mehr kürzbar
}
}
/* Operator *=
* - zum Überschreiben mit Typen der Basisklasse neu implementiert
*/
const KBruch& KBruch::operator*= (const Bruch& b)
{
/* Implementierung der Basisklasse aufrufen
* - auf nichtöffentliche Komponenten von b besteht kein Zugriff
*/
Bruch::operator*= (b);
// weiterhin gekürzt ?
if (!kuerzbar) {
kuerzbar = (ggt() > 1);
}
return *this;
}
/* scanFrom()
*/
void KBruch::scanFrom (std::istream& strm)
{
Bruch::scanFrom (strm); // scanFrom() der Basisklasse aufrufen
kuerzbar = (ggt() > 1); // Kürzbarkeit testen
}
} // **** ENDE Namespace Bsp ********************************