vererb/kbruch3.hpp

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


#ifndef KBRUCH_HPP
#define KBRUCH_HPP

// Headerdatei der Basisklasse
#include "bruch.hpp"

// **** BEGINN Namespace Bsp ********************************
namespace Bsp {

/* Klasse KBruch
 * - abgeleitet von Bruch
 * - der Zugriff auf geerbte Komponenten wird nicht
 *     eingeschränkt (public bleibt public)
 * - zur Weiter-Vererbung geeignet
 */
class KBruch : public Bruch {
  protected:
    bool kuerzbar;        // true: Bruch ist kürzbar

    // Hilfsfunktion: größter gemeinsamer Teiler von Zähler und Nenner
    unsigned ggt() const;

  public:
    /* Default-Konstruktor, Konstruktor aus Zähler
     * und Konstruktor aus Zähler und Nenner
     * - Parameter werden an Bruch-Konstruktor durchgereicht
     */
    KBruch (int z = 0, int n = 1) : Bruch(z,n) {
        kuerzbar = (ggt() > 1);
    }

    // multiplikative Zuweisung (neu implementiert)
    virtual const KBruch& operator*= (const Bruch&);

    // Eingabe mit Streams (neu implementiert)
    virtual void scanFrom (std::istream&);

    // Bruch kürzen
    virtual void kuerzen();

    // Kürzbarkeit testen
    virtual bool istKuerzbar() const {
        return kuerzbar;
    }
};

// **** ENDE Namespace Bsp ********************************

#endif    // KBRUCH_HPP