pascalabcnet/TestSuite/CompilationSamples/Inheritance1.pas
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

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.