if list[i] <> NIL
then st : st list[i].Info #13;
ShowMessage (st);
Massivning har bir elementi Tstud tipidagi ob’yektlarni ham, Tprof tipidagi ob’yektlarni ham olishi mumkin. Polimorfizm konsepsiyasi aynan har bir ob’yektning tipiga mos bo`lgan metodni qo`llashni ta`minlaydi.
Quyidagi dastur TPerson, TStud va Tprof klasslari yordamida talaba va o`qituvchilar ro`yxatini hosil qiladi va ekranga chiqaradi (10.1-listing, 10.1-rasm).
10.1-rasm. Polimorfizm dasturining dialog oynasi
10.1-listing. Polimorfizm
type
bazaviy klass
TPerson class
fName: string; nom
constructor Create(name:string);
function info:string;
virtual;
end;
Talaba klassi
TStud class(TPerson)
fGr : integer; guruh nomeri
constructor Create(name:string;gr:integer);
function info:string;
override;
end;
O`qituvchi klassi
TProf class(TPerson)
fdep:string; kafedra nomi
constructor Create(name:string;dep:string);
function info:string; override;
end;
const SZL 10; ro`yxat xajmi
var
Form1: TForm1;
List: array[1..SZL] of TPerson; ro`yxat
n:integer 0; ro`yxatdagi odamlar soni
implementation
{$R *.DFM}
constructor TPerson.Create(name:string);
begin
fName : name;
end;
constructor TStud.Create(name:string;gr:integer);
begin
inherited create(name); bazaviy klass konstruktorini chaqirish
fGr : gr;
end;
constructor TProf.create(name:string; dep:string);
begin
inherited create(name); bazaviy klass konstruktorini chaqirish
fDep : dep;
end;
function TPerson.Info:string;
begin
result : fname;
end;
function TStud.Info:string;
begin
result : fname ' gr.' IntToStr(fGr);
end;
function TProf.Info:string;
begin
result : fname ' kaf.' fDep;
end;
Qo`shib qo`yish tugmasi chertilganda
procedure TForm1.Button1Click(Sender: TObject);
begin
if n < SZL then
begin ob’yektn ro`yxatga qo`shish
N : n 1;
if Radiobutton1.Checked
then TStud ob’yektini yaratiladi
List[n] : TStud.Create(Edit1.Text,StrToInt(Edit2.Text))
else TProf ob’yektini yaratiladi
List[n] : TProf.Create(Edit1.Text,Edit2.Text);
kiritish maydoni tozalanadi
Edit1.Text : '';
Edit2.Text : '';
Edit1.SetFocus; kursor Familiya maydoniga o`tkaziladi
end
else ShowMessage('ro`yxat to`ldi!');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer; indeks
st:string; ro`yxat
begin
for i : 1 to SZL do
if list[i] <> NIL then st : st list[i].info #13;
ShowMessage('ro`yxat' #13 st);
end;
end.
Tform1.Button1Click protsedurasi (Qo`shib qo`yish) Tsud yoki Tprof klassidagi list[n] ob’yektini hosil qiladi. Yaratilayotgan ob’yektning klassi RadioButton o`chirgichlari holati bilan aniqlanadi. O`chirgich Talaba (RadioButton1) holatida bo`lsa Tstud klassi, O`qituvchi (RadioButton2) da esa Tprof klassini aniqlanadi.
TForm1.Button2Slick protsedurasi (Ro`yxat) ro`yxatning har bir elementiga info metodini qo`llaydi hamda umumiy ro`yxatdan iborat bo`lgan satrni hosil qiladi.
Do'stlaringiz bilan baham: |