Interface
uses
SysUtils;//Для функции FloatToStr
type
Tochka = class //
private
x,y,z:real;
public
constructor Build(x1,y1,z1:real); //конструктор точки
procedure SetKoord(x1,y1,z1:real);
function GetKoord:string;
end;
Implementation
constructor Tochka.Build (x1,y1,z1:real);
begin
SetKoord(x1,y1,z1);
end;
procedure Tochka.SetKoord(x1,y1,z1:real);
begin
x:=x1;
y:=y1;
z:=z1;
end;
function Tochka.Stroka:string;
begin
GetKoord:='('+FloatToStr(x)+';'+FloatToStr(y)+';'+FloatToStr(z)+')';
end;
end.
Модуль Круг:
unit KrugU;
Interface
uses
TochkaU,SysUtils;
type
Krug = class (Tochka)
protected
rad:real;
public
constructor Build(x,y,z,r:real);
procedure SetFigur(x,y,z,r:real);
procedure SetRad(r:real);
function Stroka:string;
function GetRad:real;
end;
Implementation
procedure Krug.SetRad(r:real);
begin
if r>=0 then
rad:=r
else
rad:=0;
end;
constructor Krug.Build (x,y,z,r:real);
begin
inherited Build (x,y,z); //Вызываем унаследованный конструктор
SetRad(r);
end;
procedure Krug.SetFigur(x,y,z,r:real);
begin
SetTochka(x,y,z);
SetRad(r);
end;
function Krug.Stroka:string;
begin
result:=(inherited Stroka) +' , Rad = '+FloatToStr(rad);
end;
function Krug.GetRad:real;
begin
result:=rad;
end;
end.
Модуль Шар:
unit SharU;
Interface
uses
KrugU;
const Pi=3.14;
type
Shar = class (Krug) // шар - наследник круга
public
constructor Build (x,y,z,r:real);
function Objom:real;
{ Функции печати и установки полей переходЯт в Shar без изменений}
end;
Implementation
constructor Shar.Build (x,y,z,r:real);
begin
inherited Bilde(x,y,z,r);
end;
function Shar.Objom:real;
begin
result:=(4/3)*Pi*Rad*Rad*Rad;
end;
end.
program Prim2;
{$APPTYPE CONSOLE}
uses
SysUtils,
TochkaU in 'tochkaU.pas',
KrugU in 'KrugU.pas',
SharU in 'SharU.pas';
var
P:Tochka;
begin
P:=Tochka.Build(1,2,3);//вызываем конструктор длЯ Tochka
writeln(P.Stroka); //вызовет Stroka класса Tochka
P.Free;
P:=Krug.Build(1,2,4,7);
writeln(P.Stroka); //вызовет Stroka класса Tochka
writeln(Krug(P).Stroka); //вызовет Stroka класса Krug
P.Free;
P:=Shar.Bilde(1,2,5,5);//вызываем конструктор длЯ Shar
writeln(P.Stroka); //вызовет Stroka класса Tochka
writeln(Shar(P).Stroka); //вызовет Stroka класса Shar
writeln(Shar(P).Objom); //вызовет Objom класса Shar
readln;
end.
Свойства
Свойства - это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write (слова read и write считаются зарезервированными только в контексте объявления свойства). Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него. Например:
type
TaClass = class
IntField: Integer;
Function GetField: Integer;
Procedure SetField(Value: Integer);
Property IntegerValue: Integer read GetField write SetField;
end;
В контексте программы свойство ведет себя как обычное поле. Например, мы могли бы написать такие операторы:
var
aClass: TaClass;
Value: Integer;
begin
aClass := TaClass.Create; {Обязательное обращение к конструктору перед обращением к полю или свойству!}
aClass.IntegerValue := 0;
…….
Value := aClass.IntegerValue;
…….
aClass.Destroy; // Удаление ненужного объекта
end;
Если необходимо, чтобы свойство было доступно только для чтения или только для записи, следует опустить соответственно часть write или read. Вообще говоря, свойство может и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.
