ВУЗ:
Составители:
Рубрика:
31
конс трукторы и деструкторы выполняют те же функции, что и секции
инициализ ации и финализации модуля. Конструктор задает начальные
значения полей объекта и размещает в памяти динамические структуры
данных. Деструктор освобождает ресурсы, занятые объектом во время
его существования.
Несмотря на внешний вид определения, конструктор всегда воз-
вращает адрес созданного им объекта. Поэтому для его вызова обычно
используется выражение
ИмяОбъекта := ИмяКласса.ИмяКонструктора(Параметры);
Приведенная выше инструкция
ИмяОбъекта := ИмяКласса.Create;
в действительности является частным случаем этого выражения. Она
размещает объект посредством унаследованного конструктора Create (о
наследуемых методах см. § 3.1).
Вместе с тем , конструктор может быть вызван и при помощи
обычной объ ектной ссылки:
ИмяОбъекта.ИмяКонструктора(Параметры);
В этом случае он не создает новый объект, а оперирует существующим ,
выполняя лишь те инструкции, которые перечислены в его (конструкто-
ра) реал изации, и возвращает адрес указанного объекта.
Вызов деструктора ничем не отличается от вызова обычного ме-
тода-процедуры :
ИмяОбъекта.ИмяДеструктора(Параметры);
Как и выше, Destroy является просто именем деструктора, наследуемого
каждым классом . Уничтожение объекта идет в порядке, обратном созда-
нию: сначала выполняются инструкции из реализации деструктора, з а-
тем освобождается память, занимаемая объектом .
Поскольку объекты рассмотренного нами класса Rational не ис -
пользуют никаких разделяемых ресурсов , особые деструкторы для них
не требуются. А вот хотя бы один специальный конструктор , наоборот ,
необходим , так как при создании нового объекта его знаменатель сразу
хотелось бы устанавливать бол ь шим 0.
Добавим к секции public интерфейса класса Rational объявления
constructor CreateNumber;
constructor CreateAs(n, m: Integer);
а в раздел реализации модуля UnitRational следующий код :
конс т рукторы и д ес т рукторы в ы пол няют т е же функции, что и с екции
инициал из ации и финал из ации м од ул я. Конс т руктор з ад ает начал ь ны е
з начения пол ей объект а и раз м ещает в пам ят и д инам ичес кие с т рукт уры
д анны х. Дес т руктор ос в обожд ает рес урс ы , з анят ы е объектом в о в рем я
егос ущес т в ов ания.
Н ес м от ря на в неш ний в ид опред ел ения, конс т руктор в с егд а в оз -
в ращает ад рес с оз д анногоим объект а. Поэ том у д л я его в ы з ов а обы чно
ис пол ь з ует с я в ы ражение
ИмяОбъекта := ИмяКласса.ИмяКонструктора(Параметры);
Прив ед енная в ы ш е инс т рукция
ИмяОбъекта := ИмяКласса.Create;
в д ейс т в ит ел ь нос т и яв л яет с я час т ны м с л учаем э того в ы ражения. Она
раз м ещает объект пос ред с т в ом унас л ед ов анногоконс т руктора Create (о
нас л ед уем ы хм етод ахс м . § 3.1).
Вм ес т е с т ем , конс т руктор м ожет бы т ь в ы з в ан и при пом ощи
обы чной объект ной с с ы л ки:
ИмяОбъекта.ИмяКонструктора(Параметры);
В э том с л учае он не с оз д ает нов ы й объект, а оперирует с ущес т в ующим ,
в ы пол няя л иш ь т е инс т рукции, которы е перечис л ены в его(конс т рукто-
ра) реал из ации, и в оз в ращает ад рес указ анногообъект а.
Вы з ов д ес т руктора ничем не отл ичает с я от в ы з ов а обы чногом е-
тод а-процед уры :
ИмяОбъекта.ИмяДеструктора(Параметры);
Как и в ы ш е, Destroy яв л яет с я прос тоим енем д ес т руктора, нас л ед уем ого
кажд ы м кл ас с ом . Уничтожение объект а ид ет в поряд ке, обрат ном с оз д а-
нию: с начал а в ы пол няют с я инс т рукции из реал из ации д ес т руктора, з а-
т ем ос в обожд ает с я пам ят ь , з аним аем аяобъект ом .
Пос кол ь ку объект ы рас с м от ренного нам и кл ас с а Rational не ис -
пол ь з уют никакихраз д ел яем ы хрес урс ов , ос обы е д ес т рукторы д л я них
не т ребуют с я. А в от хотя бы од ин с пециал ь ны й конс т руктор, наоборот,
необход им , т ак как при с оз д ании нов огообъект а егоз нам енат ел ь с раз у
хот ел ос ь бы ус т анав л ив ат ь бол ь ш им 0.
Добав им к с екции public инт ерфейс а кл ас с а Rational объяв л ения
constructor CreateNumber;
constructor CreateAs(n, m: Integer);
а в раз д ел реал из ации м од ул я UnitRational с л ед ующий код :
31
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »
