home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tcpp / examples / mcircle.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-10  |  3.4 KB  |  157 lines

  1. /* MCIRCLE.CPP - Beispiel aus Kapitel 5 der
  2.    Einführung */
  3.  
  4. // Zeigt mehrfache Vererbung
  5.  
  6. #include <graphics.h> // Deklaration der
  7.               // Grafik-Bibliothek
  8. #include "point.h"    // Deklaration der Klassen
  9.               // Location und Point
  10. #include <string.h>   // für String-Funktionen
  11. #include <conio.h>    // für Tastatur-Ein/Ausgabe
  12.  
  13. // mit point2.obj und graphics.lib linken
  14.  
  15. // Die Klassen-Hierarchie:
  16. // Location->Point->Circle
  17. // (Circle und CMessage)->MCircle
  18.  
  19. class Circle : public Point
  20. {  // Abgeleitet von der Klasse Point und
  21.    //  der Klasse Location
  22.  
  23. protected:
  24.    int Radius;
  25. public:
  26.    Circle(int InitX, int InitY, int InitRadius);
  27.    void Show(void);
  28. };
  29.  
  30.  
  31. class GMessage : public Location
  32. {  // zeigt eine Nachricht auf dem
  33.    //  Grafik-Bildschirm
  34.  
  35.    char *msg; // Nachricht, die gezeigt werden soll
  36.    int Font;  // der BGI-Font, der verwendet wird
  37.    int Field; // Feldgröße für die Texteinteilung
  38.  
  39. public:
  40.  
  41.    // Nachricht initialisieren
  42.    GMessage(int msgX, int msgY, int MsgFont,
  43.             int FieldSize, char *text);
  44.  
  45.    // Nachricht zeigen
  46.    void Show(void);         
  47. };
  48.  
  49.  
  50. class MCircle : Circle, GMessage
  51. {  // von beiden Klassen vererbt
  52.  
  53. public:
  54.    MCircle(int mcircX, int mcircY,
  55.            int mcircRadius, int Font,
  56.            char *msg);
  57.  
  58.    // einen Kreis mit einer Nachricht zeigen
  59.    void Show(void);                 
  60. };
  61.  
  62.  
  63. // Elementfunktionen der Klasse Circle
  64.  
  65. // Circle-Konstruktor
  66. Circle::Circle(int InitX, int InitY,
  67.                int InitRadius) :
  68.     Point (InitX, InitY)
  69.  
  70. // Vererbte Daten initialisieren
  71. //  ruft auch den Location-Konstruktor auf
  72. {
  73.    Radius = InitRadius;
  74. };
  75.  
  76. void Circle::Show(void)
  77. {
  78.    Visible = true;
  79.    circle(X, Y, Radius); // Kreis zeichnen
  80. }
  81.  
  82. // Elementfunktionen der Klasse GMessage
  83.  
  84. // GMessage-Konstruktor
  85. GMessage::GMessage(int msgX, int msgY, int MsgFont,
  86.            int FieldSize, char *text) :
  87.            Location(msgX, msgY)
  88. // X- und Y-Koordinaten, um die Nachricht zu
  89. //  zentrieren
  90. {
  91.    // Standardfonts, in graph.h definiert
  92.    Font = MsgFont;
  93.  
  94.    // Breite des Bereichs für den Text
  95.    Field = FieldSize;
  96.  
  97.    // zeigt auf die Nachricht
  98.    msg = text;        
  99. };
  100.  
  101. void GMessage::Show(void)
  102. {
  103.    // 8 Pixels pro Zeichen
  104.    int size = Field / (8 * strlen(msg));
  105.  
  106.    // zentriert im Kreis
  107.    settextjustify(CENTER_TEXT, CENTER_TEXT);
  108.  
  109.    // Größe > 1: vergrößern
  110.    settextstyle(Font, HORIZ_DIR, size);
  111.  
  112.    // den Text zeigen
  113.    outtextxy(X, Y, msg);                     
  114. }
  115.  
  116. // Elementfunktionen der Klasse MCircle
  117.  
  118. // MCircle-Konstruktor
  119. MCircle::MCircle(int mcircX, int mcircY,
  120.                  int mcircRadius, int Font,
  121.          char *msg) :
  122.          Circle (mcircX, mcircY,
  123.                  mcircRadius),
  124.          GMessage(mcircX, mcircY, Font,
  125.                   2*mcircRadius, msg)
  126. {
  127. }
  128.  
  129. void MCircle::Show(void)
  130. {
  131.    Circle::Show();
  132.    GMessage::Show();
  133. }
  134.  
  135. main()      //zeichnet einige Kreise mit Text
  136. {
  137.    int graphdriver = DETECT, graphmode;
  138.    initgraph(&graphdriver, &graphmode,
  139.              "..\\bgi");
  140.  
  141.    MCircle Small(250, 100, 25,
  142.                  SANS_SERIF_FONT, "Du");
  143.    Small.Show();
  144.  
  145.    MCircle Medium(250, 150, 100,
  146.                   TRIPLEX_FONT, "Welt");
  147.    Medium.Show();
  148.  
  149.    MCircle Large(250, 250, 225,
  150.                  GOTHIC_FONT, "Universum");
  151.    Large.Show();
  152.  
  153.    getch();
  154.    closegraph();
  155.    return 0;
  156. }
  157.