{$MODE DELPHI} // class support {$M+} // constructor support type // Define a base TPolygon class : // This class is a triangle if 3 sides, square if 4 sides ... TPolygon = class private sideCount : Integer; // How many sides? sideLength : Integer; // How long each side? shapeArea : Double; // Area of the polygon protected procedure setArea; Virtual; Abstract; // Cannot code until sides known published property count : Integer read sideCount; property length : Integer read sideLength; property area : Double read shapeArea; constructor Create(sides, length : Integer); end; // Define triangle and square descendents TTriangle = class(TPolygon) protected procedure setArea; override; // Override the abstract method end; TSquare = class(TPolygon) protected procedure setArea; override; // Override the abstract method end; // Create the TPolygon object constructor TPolygon.Create(sides, length : Integer); begin // Save the number and length of the sides sideCount := sides; sideLength := length; // Set the area using the abstract setArea method : // This call will be satisfied only by a subclass setArea; end; // Implement the abstract setArea parent method for the triangle procedure TTriangle.setArea; begin // Calculate and save the area of the triangle shapeArea := (sideLength * sideLength*0.866) / 2; end; // Implement the abstract setArea parent method for the square procedure TSquare.setArea; begin // Calculate and save the area of the square shapeArea := sideLength * sideLength; end; var triangle : TTriangle; square : TSquare; begin // Create a triangle and a square triangle := TTriangle.Create(3, 10); square := TSquare.Create(4, 10); // Show the areas of our polygons: Writeln('Triangle area = ',triangle.area); Writeln('Square area = ',square.area); end.