русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Проблема успадковування


Дата додавання: 2014-04-22; переглядів: 888.


Дещо видозмінимо попередньо створені об’єкти TStudent і TStudent1 (Програма 3.1)

program prakt1;

uses crt;

type

TStudent=object

Name:String[30];

Date:string[10];

rate:real;

procedure init(nm,Dt:String;rt:real);

function GetName:string;

function getdate:string;

function getrate:real;

procedure showname;

procedure showdate;

procedure showrate;

end;

 

TStudent1=object(TStudent)

Bal:real;

procedure init(nm,dt:string;rt,bl:real);

function getname:string;

function getbal:real;

function getsum:real;

procedure showbal;

procedure showall;

end;

 

procedure TStudent.init(nm,dt:string;rt:real);

begin

name:=nm;

date:=dt;

rate:=rt;

end;

 

function TStudent.GetName:string;

begin

getname:=name;

end;

 

procedure TStudent.showname;

begin

writeln(getname);

end;

 

procedure TStudent1.init(nm,dt:string;rt,bl:real);

begin

TStudent.Init(nm,dt,rt);

bal:=bl;

end;

 

function TStudent1.GetName:string;

begin

getname:='~'+name+'~';

end;

 

 

(далі йде текст всіх раніше створених методів)

 

var st:TStudent;

st1:TStudent1;

begin

clrscr;

writeln('батьківський обєкт');

st.init('Ляшук','01.02.1995',700);

st.showname;

writeln('спадкоємець');

with st1 do begin

init('Panko','10.10.1995',550,4.8);

showname;

end;

writeln('=======================');

repeat until keypressed;

end.

Програма 3.1

Метод showname успадковується об’єктом TStudent1 від об’єкту TStudent. В свою чергу, цей метод використовує інший: getname, який ми для TStudent і TStudent1 створили трохи по-різному:

function TStudent.GetName:string;

begin

getname:=name;

end;

 

function TStudent1.GetName:string;

begin

getname:='~'+name+'~';

end;

 

Але який варіант методу getname виконається, якщо ми застосуємо метод showname до змінної об’єктного типу TStudent1: власний метод цього типу чи відповідний метод батьківського типу? Склавши відповідну програму і виконавши її, переконаємося, що буде виконуватися метод батьківського типу.

Якщо ж нам потрібно, щоб виконався метод дочірнього типу, доведеться або його перевизначати, або ж вдатися до віртуалізації.


<== попередня лекція | наступна лекція ==>
Статичні методи | Віртуалізація методів


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн