ВУЗ:
Составители:
Рубрика:
35
Естественно, базовый класс выбирается не случайно, а так, чтобы
класс-потомок с содержательной точки зрения представлял собой его
под тип. Таким образом , отношение тождества типов , используемое при
традиционном подходе для проверки корректности присваивания, зам е-
няется более слабым отношением включения. Подробнее о совместим о-
сти классов мы будем говорить в § 3.2.
В процессе наследования все члены базового класса автоматиче-
ски становятся членами производного, причем последний может переоп -
ределить некоторые из них, а также добавить новые поля, методы и
свойства. Под переопределением здесь понимается объявление в клас се-
потом ке члена с тем же именем , что и некоторый член клас са-пред ка.
Никаких ограничений на переопределяемые члены не накладывается,
хотя в случае методов новая и старая версия обычно имеют одинаковые
заголовки.
Объявление производного класса выглядит следующим образом :
ИмяПотомка = class(ИмяПредка) СписокИзмененныхЧленов end;
где ИмяПотомка — любой допустимый идентификатор , ИмяПредка —
идентификатор некоторого определенного ранее и доступног о в данном
месте класса, СписокИзмененныхЧленов — список объявлений новых и
переопределенных членов класса (возможно, пустой ). По-прежнему каж-
дому члену может предшествовать директива, указывающая его область
видимости. При этом область видимости члена, переопределяем ого в
производном классе, не может быть сделана меньше, чем в базовом . Кро-
ме того, опубликованные члены нельзя переопределить как откры тые.
В языке Object Pascal каждый класс должен иметь в точности одно-
го предка. Единственным исключением из этого правила служит встрое н -
ный класс TObject, представляющий собой вершину иерархии наслед о-
вания. Все классы, в объявлении которых не указано имя предка, являю т -
ся прямыми потомками TObject, так что выражение
ИмяКласса = class ... end;
равносильно выражению
ИмяКласса = class(TObject) ... end;
Именно от этого класса и унаследованы , в частности, упоминавшиеся
выше конструктор Create и деструктор Destroy.
В качестве примера рассмотрим класс для работы с p-ичны ми
дробями, то есть рациональными числам и, знаменатель которых являе т -
ся степенью некоторого фиксированного простого числа p.
Е с т ес т в енно, баз ов ы й кл ас с в ы бирает с я не с л учайно, а т ак, чтобы
кл ас с -потом ок с с од ержат ел ь ной точки з рения пред с т ав л ял с обой его
под т ип. Т аким образ ом , от нош ение тожд ес т в а т ипов , ис пол ь з уем ое при
т рад иционном под ход е д л я пров ерки коррект нос т и прис в аив ания, з ам е-
няет с я бол ее с л абы м от нош ением в кл ючения. Под робнее ос ов м ес т им о-
с т и кл ас с ов м ы буд ем гов орит ь в § 3.2.
В процес с е нас л ед ов ания в с е чл ены баз ов огокл ас с а ав том ат иче-
с ки с т анов ят с я чл енам и произ в од ного, причем пос л ед ний м ожет переоп-
ред ел ит ь некоторы е из них, а т акже д обав ит ь нов ы е пол я, м етод ы и
с в ойс т в а. Под переопред ел ением з д ес ь поним ает с я объяв л ение в кл ас с е-
потом ке чл ена с т ем же им енем , что и некоторы й чл ен кл ас с а-пред ка.
Н икаких ограничений на переопред ел яем ы е чл ены не накл ад ы в ает с я,
хотя в с л учае м етод ов нов ая и с т арая в ерс ия обы чноим еют од инаков ы е
з агол ов ки.
Объяв л ение произ в од ногокл ас с а в ы гл яд ит с л ед ующим образ ом :
ИмяПотомка = class(ИмяПредка) СписокИзмененныхЧленов end;
гд е И м я П о т о м ка — л юбой д опус т им ы й ид ент ификатор, И м я П р едка —
ид ент ификатор некоторогоопред ел енногоранее и д ос тупного в д анном
м ес те кл ас с а, С пи с о кИ зм ененны хЧ лено в — с пис ок объяв л ений нов ы хи
переопред ел енны хчл енов кл ас с а (в оз м ожно, пус той). По-прежнем у каж-
д ом у чл ену м ожет пред ш ес т в ов ать д ирект ив а, указ ы в ающая егообл ас т ь
в ид им ос т и. При э том обл ас т ь в ид им ос т и чл ена, переопред ел яем ого в
произ в од ном кл ас с е, не м ожет бы т ь с д ел ана м ень ш е, чем в баз ов ом . Кро-
м е того, опубл иков анны е чл ены нел ь з я переопред ел ит ь как от кры т ы е.
В яз ы ке Object Pascal кажд ы й кл ас с д ол жен им еть в точнос ти од но-
гопред ка. Е д инс тв енны м ис кл ючением из этогоправ ил а с л ужит в с т роен-
ны й кл ас с TObject, пред с т ав л яющий с обой в ерш ину иерархии нас л ед о-
в ания. Вс е кл ас с ы , в объяв л ении которы хне указ аноим я пред ка, яв л яют -
с япрям ы м и потом кам и TObject, т ак чтов ы ражение
ИмяКласса = class ... end;
рав нос ил ь нов ы ражению
ИмяКласса = class(TObject) ... end;
И м енно от э того кл ас с а и унас л ед ов аны , в час т нос т и, упом инав ш иес я
в ы ш е конс т руктор Create и д ес т руктор Destroy.
В качес т в е прим ера рас с м от рим кл ас с д л я работ ы с p-ичны м и
д робям и, тоес т ь рационал ь ны м и чис л ам и, з нам енат ел ь которы хяв л яет -
с я с т епень ю некоторогофикс иров анногопрос тогочис л а p.
35
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »
