Полиморфизм и виртуальные методы
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 к каждому объекту списка (элементу массива), формирует строку, представляющую собой весь список.