home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 08 / grdlagen / newdisp.pas < prev    next >
Pascal/Delphi Source File  |  1990-07-05  |  3KB  |  117 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     NEWDISP.PAS                        *)
  3. (*  Demonstration von "New" und "Dispose" als Funktionen  *)
  4. (*  in Verbindung mit virtuellen Methoden, Destruktoren,  *)
  5. (*         Konstruktoren und statischen Methoden          *)
  6. (*             (c) 1990 R.Reichert & TOOLBOX              *)
  7. (* ------------------------------------------------------ *)
  8. PROGRAM NewDispose_And_VirtualMethods;
  9.  
  10. USES Crt;
  11.  
  12. TYPE
  13.   APtr = ^A;
  14.   A    = OBJECT
  15.            CONSTRUCTOR Init;
  16.            PROCEDURE   Hallo;
  17.            PROCEDURE   CallShow;
  18.            PROCEDURE   Show;     VIRTUAL;
  19.            DESTRUCTOR  Done;     VIRTUAL;
  20.          END;
  21.   BPtr = ^B;             (* Die Methode "Hallo": virtuell *)
  22.   B    = OBJECT (A)
  23.            CONSTRUCTOR Init;
  24.            PROCEDURE   Hallo;    VIRTUAL;
  25.            PROCEDURE   Show;     VIRTUAL;
  26.            DESTRUCTOR  Done;     VIRTUAL;
  27.          END;
  28.   CPtr = ^C;           (* "Hallo" muß jetzt virtuell sein *)
  29.   C    = OBJECT (B)
  30.            PROCEDURE   Hallo;    VIRTUAL;
  31.          END;
  32. VAR
  33.   aa : APtr;   (* oder: aa : BPtr;
  34.                   oder: aa : CPtr; *)
  35.  
  36. (* ------------------------------------------------------ *)
  37. (*            Implementieren der Methoden von A           *)
  38. (* ------------------------------------------------------ *)
  39.  
  40.   CONSTRUCTOR A.Init;
  41.   BEGIN
  42.     WriteLn('Hier ist der Constructor A.');
  43.   END;
  44.  
  45.   PROCEDURE A.Hallo;
  46.   BEGIN
  47.     WriteLn('A sagt "hallo" ');
  48.   END;
  49.  
  50.   PROCEDURE A.CallShow;
  51.   BEGIN
  52.     WriteLn('A ruft die Methode "Show" ');
  53.     Show;
  54.   END;
  55.  
  56.   PROCEDURE A.Show;
  57.   BEGIN
  58.     WriteLn('und hier ist "Show"');
  59.   END;
  60.  
  61.   DESTRUCTOR A.Done;
  62.   BEGIN
  63.     WriteLn('A ist fertig.');
  64.   END;
  65.  
  66. (* ------------------------------------------------------ *)
  67. (*           Implementieren der Methoden von B            *)
  68. (* ------------------------------------------------------ *)
  69.  
  70.   CONSTRUCTOR B.Init;
  71.   BEGIN
  72.     WriteLn('Jetzt kommt der Constructor B.');
  73.   END;
  74.  
  75.   PROCEDURE B.Show;
  76.   BEGIN
  77.     WriteLn('B zeigt sich, ...');
  78.   END;
  79.  
  80.   PROCEDURE B.Hallo;
  81.   BEGIN
  82.     WriteLn('...sagt auch "Hallo" ...');
  83.   END;
  84.  
  85.   DESTRUCTOR B.Done;
  86.   BEGIN
  87.     WriteLn('... und tritt ab.');
  88.   END;
  89.  
  90. (* ------------------------------------------------------ *)
  91. (*          Implementieren der Methoden von C             *)
  92. (* ------------------------------------------------------ *)
  93.  
  94.   PROCEDURE C.Hallo;
  95.   BEGIN
  96.     WriteLn('C tritt nicht auf und sagt keinen Text.');
  97.              { Im Dialog ist das Stück ein bißchen schwach }
  98.   END;
  99.  
  100. (* ------------------------------------------------------ *)
  101. (*     Hauptprogramm, am besten mit F7 "durchsteppen"     *)
  102. (* ------------------------------------------------------ *)
  103.  
  104. BEGIN
  105.   ClrScr;
  106.   aa := New(BPtr, Init);  (* oder: aa := New(APtr, Init);
  107.                              oder: aa := New(CPtr, Init); *)
  108.   aa^.Hallo;
  109.   aa^.Show;
  110.   aa^.CallShow;
  111.   aa^.Done;
  112.   ReadLn;
  113. END.
  114. (* ------------------------------------------------------ *)
  115. (*                Ende von NEWDISP.PAS                    *)
  116.  
  117.