home *** CD-ROM | disk | FTP | other *** search
- /* MCIRCLE.CPP - Beispiel aus Kapitel 5 der
- Einführung */
-
- // Zeigt mehrfache Vererbung
-
- #include <graphics.h> // Deklaration der
- // Grafik-Bibliothek
- #include "point.h" // Deklaration der Klassen
- // Location und Point
- #include <string.h> // für String-Funktionen
- #include <conio.h> // für Tastatur-Ein/Ausgabe
-
- // mit point2.obj und graphics.lib linken
-
- // Die Klassen-Hierarchie:
- // Location->Point->Circle
- // (Circle und CMessage)->MCircle
-
- class Circle : public Point
- { // Abgeleitet von der Klasse Point und
- // der Klasse Location
-
- protected:
- int Radius;
- public:
- Circle(int InitX, int InitY, int InitRadius);
- void Show(void);
- };
-
-
- class GMessage : public Location
- { // zeigt eine Nachricht auf dem
- // Grafik-Bildschirm
-
- char *msg; // Nachricht, die gezeigt werden soll
- int Font; // der BGI-Font, der verwendet wird
- int Field; // Feldgröße für die Texteinteilung
-
- public:
-
- // Nachricht initialisieren
- GMessage(int msgX, int msgY, int MsgFont,
- int FieldSize, char *text);
-
- // Nachricht zeigen
- void Show(void);
- };
-
-
- class MCircle : Circle, GMessage
- { // von beiden Klassen vererbt
-
- public:
- MCircle(int mcircX, int mcircY,
- int mcircRadius, int Font,
- char *msg);
-
- // einen Kreis mit einer Nachricht zeigen
- void Show(void);
- };
-
-
- // Elementfunktionen der Klasse Circle
-
- // Circle-Konstruktor
- Circle::Circle(int InitX, int InitY,
- int InitRadius) :
- Point (InitX, InitY)
-
- // Vererbte Daten initialisieren
- // ruft auch den Location-Konstruktor auf
- {
- Radius = InitRadius;
- };
-
- void Circle::Show(void)
- {
- Visible = true;
- circle(X, Y, Radius); // Kreis zeichnen
- }
-
- // Elementfunktionen der Klasse GMessage
-
- // GMessage-Konstruktor
- GMessage::GMessage(int msgX, int msgY, int MsgFont,
- int FieldSize, char *text) :
- Location(msgX, msgY)
- // X- und Y-Koordinaten, um die Nachricht zu
- // zentrieren
- {
- // Standardfonts, in graph.h definiert
- Font = MsgFont;
-
- // Breite des Bereichs für den Text
- Field = FieldSize;
-
- // zeigt auf die Nachricht
- msg = text;
- };
-
- void GMessage::Show(void)
- {
- // 8 Pixels pro Zeichen
- int size = Field / (8 * strlen(msg));
-
- // zentriert im Kreis
- settextjustify(CENTER_TEXT, CENTER_TEXT);
-
- // Größe > 1: vergrößern
- settextstyle(Font, HORIZ_DIR, size);
-
- // den Text zeigen
- outtextxy(X, Y, msg);
- }
-
- // Elementfunktionen der Klasse MCircle
-
- // MCircle-Konstruktor
- MCircle::MCircle(int mcircX, int mcircY,
- int mcircRadius, int Font,
- char *msg) :
- Circle (mcircX, mcircY,
- mcircRadius),
- GMessage(mcircX, mcircY, Font,
- 2*mcircRadius, msg)
- {
- }
-
- void MCircle::Show(void)
- {
- Circle::Show();
- GMessage::Show();
- }
-
- main() //zeichnet einige Kreise mit Text
- {
- int graphdriver = DETECT, graphmode;
- initgraph(&graphdriver, &graphmode,
- "..\\bgi");
-
- MCircle Small(250, 100, 25,
- SANS_SERIF_FONT, "Du");
- Small.Show();
-
- MCircle Medium(250, 150, 100,
- TRIPLEX_FONT, "Welt");
- Medium.Show();
-
- MCircle Large(250, 250, 225,
- GOTHIC_FONT, "Universum");
- Large.Show();
-
- getch();
- closegraph();
- return 0;
- }
-