mmotop20oo12
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Доброго времени суток, возник еще вопрос. Прочел про приват и понял, что он используется что бы потомок не унаследовал метод предка, я создал 2 объекта: человек и солдат, у человека есть имя возраст и дата рождения, а у солдата добавлен ранг, в приват у человека я всунул функцию нахождения суммы: возраст + дата рождения. В главной программе 2 переменные: 1 для человека, другая для солдата, и при попытке вызвать сумму для солдата, она выводится, хотя я ее же скрыл. Вроде же должно выдавать ошибку что: нету такой функции. И еще 1 непонятный момент, я процедуру "репорта" солдата не делал вывод в 2 строки, а эту сумму наоборот делал так, что бы она выводилась на следующей строке, но печатает сначало: на 1ой строке имя возраст дата рождения, а на другой звание и сумму, хотя я вообще не так делал, в чем тут ошибки? Вот код: Код: uses SysUtils; type TPerson = object public MName : string; MAge : integer; Mdate : integer; constructor Init (const Aname:string; Aage, Adate : integer); procedure report; virtual; private function getSum:integer; end; TMilitary = object (Tperson) mrank : string; constructor Init (const Aname, Arank:string; Aage, Adate : integer); procedure report; virtual; end; constructor TPerson.init (const Aname:string; Aage, Adate : integer); begin mname := aname; MAge := aage; Mdate:=adate; end; procedure TPerson.report; begin writeln(mname,' ',mage,' ',mdate, ' '); end; function Tperson.getSum:integer; begin result:=mage+mdate; end; constructor TMilitary.Init (const Aname, Arank:string; Aage, Adate : integer); begin inherited Init(Aname, Aage, Adate ); Mrank := arank; end; procedure Tmilitary.report; begin inherited report; write(' '+Mrank); end; var P:TMilitary; p1:tperson; begin P.Init('Makarow', 'solder', 25, 1990); p.report; writeln(p.Getsum); readln; p1.init ('sidorov', 26, 1991); p1.report; p1.getSum; readln; end. |
|