Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Деструктор

Конструктор

Инициализация и разрушение объекта. Конструктор и деструктор.

Конструктор – это особый метод, который позволяет выполнять некоторую работу, обеспечивающую поддержку механизма виртуальных методов. Он должен вызываться раньше других методов объекта, т.к. он выполняет инициализацию объекта. Вместо слова «procedure» в объявлении объектных типов используется « constructor ».

Для объявления конструктора используется зарезервированное слово constructor, после которого идет имя конструктора и параметры, если необходимо. Конструктор возвращает указатель на экземпляр класса. В теле конструктора Вы можете вызвать конструктор предка для инициализации закрытой части предка значениями по умолчанию, например:

Для создания объектов используется расширенный синтаксис вызова функции new, который позволяет выделить память для объекта и инициализировать объект с помощью вызова конструктора. Общий вид инструкции:

Указатель:=new(ТипОбъекта, КонстукторОбъекта);

Для уничтожение объекта служит деструктор. Деструктор объявляется с помощью зарезервированного слова destructor, после которого идет имя деструктора. Деструктор ничего не возвращает и не имеет параметров.

Т.к. объект представляет собой сложную структуру, то рекомендуется использовать метод Done. Метод Done оформляется как деструктор – особая процедура, выполняющая специфическую работу, в том числе обеспечивающая объединение освобождающихся, возможно, небольших участков памяти в более крупные блоки.

Инструкция Dispose(p,Done); уничтожает объект, на который указывает P.

На практике в качестве конструктора используют метод, устанавливающий начальные значения экземпляра объекта. В частности, конструктор может быть пустым. В рассмотренном примере конструктором является метод Init. Конструктор – это обычный метод-процедура, в котором служебное слово procedure заменено на constructor. Он, помимо действий, заданных в его теле, выполняет установочную работу для механизма виртуальных методов, обеспечивая вызов в процессе выполнения программы именно того виртуального метода, который определён для вызывающего объекта. В примере 3 один и тот же метод Moveto будет работать по-разному (передвигать различные фигуры) в зависимости от того, экземпляр какого объектового типа этот метод вызывает. Такое свойство называется полиморфизмом. Полиморфизм возникает на стыке принципов наследования и динамических связей. Полиморфизм означает возможность определения единого по имени метода в каждом объектовом типе иерархической структуры разными способами. Пример 3. Текст программы, использующий виртуальные методы, может быть следующим:Uses Crt, Graph;Var gd,gm: integer;Type Tp = Object X,y,c: integer;

Constructor Init (ax,ay,ac: integer);

Procedure Show; Virtual;

Procedure Hide; Virtual;

Procedure Moveto (dx,dy: integer);

End;

Constructor Tp. Init;

Begin X:=ax; y:=ay; c:=ac End;

Procedure Tp. Show;

Begin Putpixel(x,y,c); End;

Procedure Tp. Hide;

Begin Putpixel(x,y,Getbkcolor) End;

Procedure Tp. Moveto;

Begin

Delay(1000); Hide;

X:=x+dx; y:=y+dy; Show End; Type Tc = Object (Tp)R: integer;

Constructor Init (ax,ay,ac,ar: integer);

Procedure Show; Virtual;

Procedure Hide; Virtual;

End;

Constructor Tc. Init;

Begin Inherited(ax,ay,ac); R:=ar End;

Procedure Tc. Show;

BeginSetcolor(c); Circle(x,y,r)End;

Procedure Tc. Hide;

BeginSetcolor(Getbkcolor); Circle(x,y,r)End; Var P: Tp; C: Tc;BeginGd:=Detect;Initgraph(Gd,Dm,’c:\bp\bgi’);

P. Init (100,120,yellow);

P. Show; P. Moveto (50,50);

Readln;

C.Init (200,300,Green,150);

C. Show; C.Moveto (10,10);

Readln;ClosegraphEnd. Пример 4. Приведём пример реализации в виде объекта списка целых чисел. В качестве методов будем использовать следующие: инициализацию списка, добавление в список элемента с заданным значением, обработку элементов списка (печать) и метод, предназначенный для освобождения ранее выделенной памяти.Type Link =^Rec; Rec=Record Inf: Integer; Next: Link End; Tsp =Object Start: Link; Procedure Init; Procedure In _ Spisok (X:integer); Procedure Print _ Spisok; Procedure Done; End;Procedure Tsp. Init; Begin Start:=NilEnd; Procedure Tsp. In_Spisok;Var p: Link;BeginNew(p); P^.inf:=x; P^.next:=Start;Start:=pEnd; Procedure Tsp. Print_Spisok;Var p: Link;BeginP:=Start;While p<>Nil doBeginWrite(P^.inf:6);P:=P^.nextEnd;End; Procedure Tsp. Done;Var p: Link;BeginWhile Start<> Nil doBeginP:=Start;Start:=Start^.next;Dispose(p)EndEnd; Var Spisok: Tsp; A: integer; Ch: char;Begin Spisok. Init; Repeat Readln(A); Spisok. In_Spisok(A); Readln(Ch); Until Ch in [‘n’,’N’]; Spisok.Print_Spisok; Spisok. Done End.

Контрольные вопросы

1. Опишите структуру объекта.

2. Дайте определению понятиям «конструктор», «деструктор».

 

<== предыдущая лекция | следующая лекция ==>
Векторная диаграмма трансформатора | Тема: Внутренняя и внешняя среда организации
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 348; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.