66 lines
1.6 KiB
ObjectPascal
66 lines
1.6 KiB
ObjectPascal
// Íàñëåäîâàíèå. Ïîëèìîðôèçì è âèðòóàëüíûå ôóíêöèè
|
|
type
|
|
Person = class
|
|
private
|
|
name: string;
|
|
age: integer;
|
|
public
|
|
constructor (n: string; a: integer);
|
|
begin
|
|
name := n; age := a;
|
|
end;
|
|
procedure Print; virtual; // Âèðòóàëüíàÿ ôóíêöèÿ. Ïåðåîïðåäåëÿåòñÿ â êëàññàõ-ïîòîìêàõ
|
|
begin
|
|
var s := GetType.ToString;
|
|
write('Òèï: ',Copy(s,pos('.',s)+1,Length(s)):7,' Èìÿ: ',name,' Âîçðàñò: ',age);
|
|
end;
|
|
procedure Println;
|
|
begin
|
|
Print;
|
|
writeln;
|
|
end;
|
|
end;
|
|
|
|
Pupil = class(Person) // Pupil - íàñëåäíèê Person
|
|
private
|
|
clas: integer;
|
|
public
|
|
constructor (n: string; a,c: integer);
|
|
begin
|
|
inherited Create(n,a); // Âûçîâ óíàñëåäîâàííîãî êîíñòðóêòîðà
|
|
clas := c;
|
|
end;
|
|
procedure Print; override;
|
|
begin
|
|
inherited Print;
|
|
write(' Êëàññ: ',clas);
|
|
end;
|
|
end;
|
|
|
|
Teacher = class(Person)
|
|
private
|
|
predm: string;
|
|
public
|
|
constructor (n: string; a: integer; p: string);
|
|
begin
|
|
inherited Create(n,a); // Âûçîâ óíàñëåäîâàííîãî êîíñòðóêòîðà
|
|
predm := p;
|
|
end;
|
|
procedure Print; override;
|
|
begin
|
|
inherited Print;
|
|
write(' Ïðåäìåò: ',predm);
|
|
end;
|
|
end;
|
|
|
|
var a: array of Person := new Person[4]; // Ïîëèìîðôíûé êîíòåéíåð - êîíòåéíåð îáúåêòîâ áàçîâîãî êëàññà. Ìîæåò ñîäåðæàòü îáúåêòû ïðîèçâîäíûõ êëàññîâ
|
|
|
|
begin
|
|
a[0] := new Pupil('Âîâà',11,5);
|
|
a[1] := new Teacher('Ìàðüÿ Èâàíîâíà',30,'Èíôîðìàòèêà');
|
|
a[2] := new Person('Èâàíîâ',65);
|
|
a[3] := new Pupil('Âàñÿ',12,6);
|
|
|
|
for var i:=0 to a.Length-1 do
|
|
a[i].Println;
|
|
end. |