ВУЗ:
Составители:
Рубрика:
38
Далее мы можем вызвать любой метод объекта, используя такую же точеч-
ную нотацию, что и при обращении к полю объекта:
s1.Push(5);
В результате структура в оперативной памяти изменится следующим образом:
Заметим, что хотя s1 и хранит адрес объекта, при доступе к объекту не тре-
бует использования операции разыменования ^, т.е. имя переменной класса явля-
ется как бы разыменованным указателем. Таким образом, переменная-объект по
существу представляет собой ссылку на объект в динамической памяти.
Деструктор разрушает объект в динамической памяти
, его вызов производит-
ся как вызов обычного метода:
s1.Destroy;
До вызова конструктора и после вызова деструктора обращение к полям объ-
екта и вызов его методов приводят к ошибке времени выполнения.
Ссылочная природа объектов в языке Delphi Pascal приводит к следующим
особенностям выполнения операций присваивания и сравнения объектов. При
присваивании объектов (s1:=s2) в переменную s1 записывается тот адрес, ко-
торый хранится в
переменной s2, в результате чего s1 и s2 будут указывать на
один и тот же объект в динамической памяти. Если требуется отметить, что пере-
менная типа класс не связана ни с каким объектом в динамической памяти, ей
присваивают значение nil: s1:=nil. При сравнении (s1=s2, s1<>s2) проис-
ходит сравнение адресов объектов,
то есть две переменных-объекта считаются
равными только тогда, когда они ссылаются на один и тот же объект в динамиче-
ской памяти.
Клиентская программа для АТД «Стек»
Задача. Дана последовательность целых положительных чисел, признаком ее
завершения служит число 0. Вывести сначала все четные числа в обратном поряд-
ке, а затем все нечетные – также в обратном порядке.
Решение. Воспользуемся двумя стеками; по мере считывания четные числа
будем помещать в первый стек (s1), нечетные – во второй (s2). По окончании
ввода
выведем содержимое обоих стеков.
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »