Основы языка Delphi

         

Демонстрация полиморфизма



Листинг 9.1. Демонстрация полиморфизма

unit polimor_;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm) Edit1: TEdit;

Edit2: TEdit;

GroupBoxl: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

procedure ButtonlClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

// базовый класс

TPerson = class

fName: string; // имя

constructor Create(name:string);

function info:string; virtual;

end;

// класс Студент TStud = class(TPerson)

fGr:integer; // номер группы

constructor Create(name:string;gr:integer);

function info:string;

override;

end;

// класс Преподаватель

TProf = class (TPerson)

fdep:string; // название кафедры

constructor Create(name:string;dep:string);

function info:string;

override;

end;

const

SZL = 10; // размер списка

var

Forml: TForm1;

List: array[l..SZL] of TPerson; // список

n:integer =0; // кол-во людей в списке

implementation

{$R *.DFM}

constructor TPerson.Create(name:string);

begin

fName := name; end;

constructor TStud.Create(name:string;gr:integer);

begin

inherited create(name);
// вызвать конструктор базового класса

fGr := gr; end;

constructor TProf.create(name:string; dep:string);

begin

inherited create(name);
// вызвать конструктор базового класса

fDep := dep; end;

function TPerson.Info:string;

begin

result := fname; end;

function TStud.Info:string;

begin

result := fname + ' rp.' + IntToStr(fGr);
end;

function TProf.Info:string;

begin

result := fname + ' каф.' + fDep;

end;

// щелчок на кнопке Добавить

procedure TForml.ButtonlClick(Sender: TObject);

begin

if n < SZL then begin

// добавить объект в список

n:=n+l;

if Radiobuttonl.Checked

then // создадим объект TStud

List[n]:=TStud.Create(Edit1.Text,StrToInt(Edit2.Text))

else // создать объект TProf

List[n]:=TProf.Create(Edit1.Text,Edit2.Text);
// очистить поля ввода

Edit1.Text := '' ; Edit2.Text := '';

Edit1.SetFocus; // курсор в поле Фамилия

end

else ShowMessage('Список заполнен!');

end;

// щелчок на кнопке Список

procedure TForm1.Button2Click(Sender: TObject);

var

i:integer; // индекс

st:string; // список begin

for i:=1 to SZL do

if list[i] <>
NIL then st:=st + list[i].info + 113;

ShowMessage('Cпиcoк'+#13+st);
end;

end.

Процедура TForml.Buttoniciick, которая запускается нажатием кнопки Добавить (Buttonl), создает объект iist[n] класса TStud или TProf. Класс создаваемого объекта определяется состоянием переключателя RadioButton. Установка переключателя в положение студент (RadioButtoni) определяет класс TStud, а в положение преподаватель (RadioButton2) — класс TProf.

Процедура TForm1.Button2Сlick, которая запускается нажатием кнопки Список (Button2), применяя метод info к каждому объекту списка (элементу массива), формирует строку, представляющую собой весь список.



Содержание раздела