vererb/kbruch5.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
 * - neu: der Zugriff auf geerbte Komponenten wird eingeschränkt
 *     (public wird protected)
 * - damit gilt die is-a-Beziehung nicht mehr
 */
class KBruch : protected 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);
    }

    // neu: reine Zugriffsdeklaration für Operationen, die public bleiben
    Bruch::printOn;
    Bruch::toDouble;

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

    // Eingabe mit Streams
    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