Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m12_lection2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
90 Кб
Скачать
☆

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. Вообще говоря, свойство может и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]