home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue32 / multiple / MultAnim.pas next >
Encoding:
Pascal/Delphi Source File  |  1997-11-24  |  3.1 KB  |  165 lines

  1. unit MultAnim;
  2.  
  3. interface
  4.  
  5. type
  6.   IAnimal = interface
  7.     ['{248CC900-64CB-11D1-98D1-004845400FAA}']
  8.     function Kind: string;
  9.   end;
  10.  
  11.   ICanFly = interface (IAnimal)
  12.     ['{248CC901-64CB-11D1-98D1-004845400FAA}']
  13.     function Fly: string;
  14.   end;
  15.  
  16.   ICanWalk = interface (IAnimal)
  17.     ['{248CC902-64CB-11D1-98D1-004845400FAA}']
  18.     function Walk: string;
  19.   end;
  20.  
  21.   ICanSwim = interface (IAnimal)
  22.     ['{248CC903-64CB-11D1-98D1-004845400FAA}']
  23.     function Swim: string;
  24.   end;
  25.  
  26.   IMammal = interface (IAnimal)
  27.     ['{248CC904-64CB-11D1-98D1-004845400FAA}']
  28.     function CarryChild: string;
  29.   end;
  30.  
  31.   IBird = interface (IAnimal)
  32.     ['{248CC905-64CB-11D1-98D1-004845400FAA}']
  33.     function LayEggs: string;
  34.   end;
  35.  
  36.   TAnimal = class (TInterfacedObject, IAnimal)
  37.     function Kind: string; virtual; abstract;
  38.     destructor Destroy; override;    
  39.   end;
  40.  
  41.   TMammal = class (TAnimal, IMammal)
  42.     function CarryChild: string; virtual;
  43.   end;
  44.  
  45.   TBird = class (TAnimal, IBird)
  46.     function LayEggs: string; virtual;
  47.   end;
  48.  
  49.   TEagle = class (TBird, ICanFly)
  50.     function Kind: string; override;
  51.     function Fly: string; virtual;
  52.   end;
  53.  
  54.   TPenguin = class (TBird, ICanWalk, ICanSwim)
  55.     function Kind: string; override;
  56.     function Walk: string; virtual;
  57.     function Swim: string; virtual;
  58.   end;
  59.  
  60.   TDuck = class (TBird, ICanWalk, ICanFly, ICanSwim)
  61.     function Kind: string; override;
  62.     function Walk: string; virtual;
  63.     function Fly: string; virtual;
  64.     function Swim: string; virtual;
  65.   end;
  66.  
  67.   TBat = class (TMammal, ICanFly)
  68.     function Kind: string; override;
  69.     function Fly: string; virtual;
  70.   end;
  71.  
  72.   TMonkey = class (TMammal, ICanWalk)
  73.     function Kind: string; override;
  74.     function Walk: string; virtual;
  75.   end;
  76.  
  77. implementation
  78.  
  79. uses
  80.   Windows;
  81.  
  82. destructor TAnimal.Destroy;
  83. begin
  84.   // MessageBox (0, pChar ('Destroying ' + Kind),
  85.   //   'Anim MI', MB_OK);
  86.   inherited;
  87. end;
  88.  
  89. function TMammal.CarryChild: string;
  90. begin
  91.   Result := 'Female mammals carry children for months';
  92. end;
  93.  
  94. function TBird.LayEggs: string;
  95. begin
  96.   Result := 'Birds lay eggs';
  97. end;
  98.  
  99. function TEagle.Kind: string;
  100. begin
  101.   Result := 'Eagle';
  102. end;
  103.  
  104. function TEagle.Fly: string;
  105. begin
  106.   Result := 'Eagles fly over mountains';
  107. end;
  108.  
  109. function TPenguin.Kind: string;
  110. begin
  111.   Result := 'Penguin';
  112. end;
  113.  
  114. function TPenguin.Walk: string;
  115. begin
  116.   Result := 'Penguins walk on ice';
  117. end;
  118.  
  119. function TPenguin.Swim: string;
  120. begin
  121.   Result := 'Penguins swim better than they walk';
  122. end;
  123.  
  124. function TBat.Kind: string;
  125. begin
  126.   Result := 'Bat';
  127. end;
  128.  
  129. function TBat.Fly: string;
  130. begin
  131.   Result := 'Bats fly in the night';
  132. end;
  133.  
  134. function TDuck.Kind: string;
  135. begin
  136.   Result := 'Duck';
  137. end;
  138.  
  139. function TDuck.Walk: string;
  140. begin
  141.   Result := 'Ducks walk in a funny way';
  142. end;
  143.  
  144. function TDuck.Fly: string;
  145. begin
  146.   Result := 'Ducks fly and migrate';
  147. end;
  148.  
  149. function TDuck.Swim: string;
  150. begin
  151.   Result := 'Ducks swim as well';
  152. end;
  153.  
  154. function TMonkey.Kind: string;
  155. begin
  156.   Result := 'Monkey';
  157. end;
  158.  
  159. function TMonkey.Walk: string;
  160. begin
  161.   Result := 'A walking monkey';
  162. end;
  163.  
  164. end.
  165.