ВУЗ:
Составители:
Рубрика:
14
const Dim = n; // вместо n необходимо указать конкретное целое число
3. Каждый объект класса IVector представляет собой самостоя-
тельный вектор , компоненты которого должны храниться в полях данно-
го объекта. Соображения, приведенные в решении задачи 1.1, показ ы -
вают, что для этой цели достаточно одного поля, являющегося одномер-
ным массивом ц е лых чисел размерности Dim. Это поле назовем comp:
comp: array[1..Dim] of Integer;
4. Введенное поле не является указателем , поэтому при уничт о-
жении объекта занимаемая этим полем память будет полностью освоб о-
ждена компилятором . Хотя мы и не реализовали методы, но, учитывая
с емантику класса, разум но предположить, что в ходе их работы не будут
захватываться никакие ресурсы. Следовательно, переопределять унасле-
дованный деструктор не нужно. Так как явное размещение поля в пам я-
ти и его инициализация определенными значениями не требуются, соб-
ственный конструктор также не является необходимым.
Отметим , что все сказанное выше относительно автоматического
управ ления выделением и освобождением памяти касается только поля
comp. Объекты класса IVector, как и любые объекты любых других клас-
сов , необходимо создавать и удалять явным образом .
5. Реализация методов класса IVector может быть легко получена
из реализации подпрограмм задачи 1.1. Для этого достаточно лишь при-
нять во внимание следующее:
а) при реализации имя метода должно быть квалифицировано им е-
нем кл асса;
б) если раньше все параметры описывались в заголовке подпро-
граммы, то теперь один из них передается неявно и доступен внутри
метода под именем self;
в ) вместо выражения v[i] для обращения к i-й компоненте вектора v
внутри реализации класса (и только здесь) следует использовать выра-
жение v.comp[i], задающее i-й элемент поля-массива comp объекта v;
г) если результатом функции является вектор , т. е. объект класса
IVector, его необходимо явным образом разместить в памяти путем в ы -
зова конструктора Create.
После внесения всех изменений мы получаем следующий код
( все добавления и изменения отмечены подчеркиванием ).
Пример 2.1.1. Реализация методов класса IVector.
function IVector.Plus(v: IVector): IVector;
var i: Integer;
const Dim = n; // вместо n необходимо указать конкретное целое число 3. Кажд ы й объект кл ас с а IVector пред с т ав л яет с обой с ам ос тоя- т ел ь ны й в ектор, ком понент ы которогод ол жны хранит ь с я в пол ях д анно- го объект а. С оображения, прив ед енны е в решении з ад ачи 1.1, показ ы - в ают, чтод л я этой ц ел и д ос т аточноод ногопол я, яв л яющ егос я од ном ер- ны м м ас с ив ом ц ел ы х чис ел раз м ернос т и Dim. Э топол е наз ов ем comp: comp: array[1..Dim] of Integer; 4. Вв ед енное пол е не яв л яет с я указ ат ел ем , поэтом у при уничто- жении объект а з аним аем ая эт им пол ем пам ят ь буд ет пол нос т ь ю ос в обо- жд ена ком пил ятором . Х отя м ы и не реал из ов ал и м етод ы , но, учит ы в ая с ем ант ику кл ас с а, раз ум нопред пол ожит ь , чтов ход е их работ ы не буд ут з ахв ат ы в ат ь с я никакие рес урс ы . С л ед ов ат ел ь но, переопред ел ят ь унас л е- д ов анны й д ес т руктор не нужно. Т ак как яв ное раз м ещ ение пол я в пам я- т и и егоиниц иал из ац ия опред ел енны м и з начениям и не т ребуют с я, с об- с т в енны й конс т руктор т акже не яв л яет с я необход им ы м . О т м ет им , чтов с е с каз анное в ы ше от нос ит ел ь ноав том ат ичес кого управ л ения в ы д ел ением и ос в обожд ением пам ят и кас ает с я тол ь копол я comp. О бъект ы кл ас с а IVector, как и л юбы е объект ы л юбы х д ругих кл ас - с ов , необход им ос оз д ав ат ь и уд ал ят ь яв ны м образ ом . 5. Реал из ац ия м етод ов кл ас с а IVector м ожет бы т ь л егкопол учена из реал из ац ии под програм м з ад ачи 1.1. Дл я этогод ос т аточнол ишь при- нят ь в ов ним ание с л ед ующ ее: а) при реал из ац ии им я м етод а д ол жно бы т ь кв ал ифиц иров аноим е- нем кл ас с а; б) ес л и рань ше в с е парам ет ры опис ы в ал ис ь в з агол ов ке под про- грам м ы , то т еперь од ин из них перед ает с я неяв но и д ос т упен в нут ри м етод а под им енем self; в ) в м ес тов ы ражения v[i] д л я обращ ения к i-й ком понент е в ектора v в нут ри реал из ац ии кл ас с а (и тол ь ко з д ес ь ) с л ед ует ис пол ь з ов ат ь в ы ра- жение v.comp[i], з ад ающ ее i-й эл ем ент пол я-м ас с ив а comp объект а v; г) ес л и рез ул ьт атом функц ии яв л яет с я в ектор, т. е. объект кл ас с а IVector, егонеобход им о яв ны м образ ом раз м ес т ит ь в пам ят и пут ем в ы - з ов а конс т руктора Create. Пос л е в нес ения в с ех из м енений м ы пол учаем с л ед ующ ий код (в с е д обав л ения и из м енения от м ечены под черкив анием ). Пример2.1.1. Реал из ац ия м етод ов кл ас с а IVector. function IVector.Plus(v: IVector): IVector; var i: Integer; 14
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »