ВУЗ:
Составители:
Рубрика:
41
формации. Так, например, приведение ссылок позволяет компилятору
интерпретировать один и тот же указатель как адрес чего угодно: числа,
символа и т. д.
Совместимость классов реализуется именно путем приведения.
Каждая объектная переменная представляет собой обычный указатель,
и, выполняя несложные манипуляции, мы можем сопоставить ей адрес
объекта любого класса, а не только того, который фигурировал в объ яв -
лении данной переменной .
Однако подобная вседозволенность чревата серьезными ошибк а -
ми, проявляющимися только во время выполнения программы. В самом
деле, если мы присвоим переменной класса PAryFraction адрес некот о-
рого объекта r класса Rational, то операции с полем base выведут нас за
пределы реального объекта. В частности, его изменение приведет к не-
явной модификации данных, хранящихся в памяти сразу за объектом r
( см. рис . 3.1).
Рис . 3.1.
Именно поэтому приведение типа, автоматически осуществляемое
компилятором , огр а ничивается присваиванием ссылке на объект клас са-
пред ка ад реса объекта клас са-потом ка. Поскольку любой член базового
класса являе т ся и членом производного, реальный объект в этом случае
заведомо содержит все поля, к которым допустимо обращение (и разме-
щаются они точно так же, как и в объектах базового класса). Кроме того,
все операции, применимые к экземплярам клас са-пред ка, ок а зываются
выполнимы и для экземпляров клас са-потом ка (см. рис . 3.2).
Таким образом , программист получает безопасную возможность
манипулировать объектами производных классов при помощи ссылок на
объекты класса базового. С другой стороны , следует постоянно иметь в
виду, что используемый объект может принадлежать любому классу из
некоторого потенциально бесконечного семейства, определяемого и е-
рархией наследования. Именно этим объект но-ориентированное про-
Ад рес уем ы й объект
поле num
поле den
поле base
Объект r
Ссылка на объект
класса PAryFraction
форм ации. Т ак, наприм ер, прив ед ение с с ы л ок поз в ол яет ком пил ятору
инт ерпрет иров ат ь од ин и тот же указ ат ел ь как ад рес чегоугод но: чис л а,
с им в ол а и т. д .
Сов м ес т им ос т ь кл ас с ов реал из ует с я им енно пут ем прив ед ения.
Кажд ая объект ная перем енная пред с т ав л яет с обой обы чны й указ ат ел ь ,
и, в ы пол няя нес л ожны е м анипул яции, м ы м ожем с опос т ав ит ь ей ад рес
объект а л юбогокл ас с а, а не тол ь котого, которы й фигуриров ал в объяв -
л ении д анной перем енной.
Од нако под обная в с ед оз в ол еннос т ь чрев ат а с ерь ез ны м и ош ибка-
м и, прояв л яющим ис я тол ь ков ов рем я в ы пол нения програм м ы . В с ам ом
д ел е, ес л и м ы прис в оим перем енной кл ас с а PAryFraction ад рес некото-
рогообъект а r кл ас с а Rational, тооперации с пол ем base в ы в ед ут нас з а
пред ел ы реал ь ногообъект а. В час т нос т и, егоиз м енение прив ед ет к не-
яв ной м од ификации д анны х, хранящихс я в пам ят и с раз у з а объектом r
(с м . рис . 3.1).
Сс ы л ка на объект
кл ас с а PAryFraction
Ад рес уем ы й объект
пол е num
Объект r
пол е den
пол е base
Рис . 3.1.
И м еннопоэ том у прив ед ение т ипа, ав том ат ичес ки ос ущес т в л яем ое
ком пил ятором , ограничив ает с я прис в аив анием с с ы л ке на объект кл ас с а-
пред ка ад рес а объект а кл ас с а-потом ка. Пос кол ь ку л юбой чл ен баз ов ого
кл ас с а яв л яет с я и чл еном произ в од ного, реал ь ны й объект в этом с л учае
з ав ед ом ос од ержит в с е пол я, к которы м д опус т им ообращение (и раз м е-
щают с я они точнот ак же, как и в объект ахбаз ов огокл ас с а). Кром е того,
в с е операции, прим еним ы е к э кз ем пл ярам кл ас с а-пред ка, оказ ы в ают с я
в ы пол ним ы и д л яэ кз ем пл яров кл ас с а-потом ка (с м . рис . 3.2).
Т аким образ ом , програм м ис т пол учает без опас ную в оз м ожнос т ь
м анипул иров ат ь объект ам и произ в од ны хкл ас с ов при пом ощи с с ы л ок на
объект ы кл ас с а баз ов ого. С д ругой с тороны , с л ед ует пос тоянноим ет ь в
в ид у, что ис пол ь з уем ы й объект м ожет принад л ежат ь л юбом у кл ас с у из
некоторого пот енциал ь но бес конечного с ем ейс т в а, опред ел яем ого ие-
рархией нас л ед ов ания. И м енно э т им объе ктн о-орие н тирова н н ое про-
41
Страницы
- « первая
- ‹ предыдущая
- …
- 39
- 40
- 41
- 42
- 43
- …
- следующая ›
- последняя »
