program Project1;
{$MODE OBJFPC}
{$APPTYPE CONSOLE}
type
IWithDegrees = interface(IInterface)
function GetDegrees: Single;
property Degrees: Single read GetDegrees;
end;
TWithDegrees = class(TInterfacedObject, IWithDegrees)
private
FDegrees: Single;
function GetDegrees: Single;
public
constructor Create(const ADegrees: Single);
end;
ICelsius = interface(IWithDegrees)
end;
IFahrenheit = interface(IWithDegrees)
end;
TCelsius = class(TWithDegrees, ICelsius)
end;
TFahrenheit = class(TWithDegrees, IFahrenheit)
end;
operator := (const Celsius: ICelsius): IFahrenheit;
begin
Result := TFahrenheit.Create(9.0/5.0 * Celsius.Degrees + 32);
end;
operator := (const Fahrenheit: IFahrenheit): ICelsius;
begin
Result := TCelsius.Create(5.0/9.0 * (Fahrenheit.Degrees - 32));
end;
constructor TWithDegrees.Create(const ADegrees: Single);
begin
inherited Create;
FDegrees := ADegrees;
end;
function TWithDegrees.GetDegrees: Single;
begin
Result := FDegrees;
end;
var
Fahr, Fahr2: IFahrenheit;
c: ICelsius;
begin
Fahr := TFahrenheit.Create(100.0);
Write(Fahr.Degrees:0:2, ' Fahrenheit');
c := Fahr;
Write(' = ', c.Degrees:0:2, ' Celsius');
Fahr2 := c;
Writeln(' = ', Fahr2.Degrees:0:2, ' Fahrenheit');
Readln;
end.