русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Динамічні об’єкти і процедура New


Дата додавання: 2014-04-22; переглядів: 1433.


Так само, як і будь-які інші типи даних в Pascal-i, об’єкти можна розміщувати в динамічній пам’яті і працювати з ними, використовуючи вказівники. Спеціально для роботи з динамічними об’єктами Pascal включає кілька вдосконалених процедур для розміщення і видалення об’єктів з пам’яті найбільш ефективним способом.

Одним з найпростіших способів розміщення об’єктів у пам’яті є використання процедури New, що традиційно застосовується для роботи з вказівниками.

VAR

Sum:Real;

S: ^TStudent;

New(S);

Як і для інших типів даних, процедура New виділяє в динамічній пам’яті область, достатню для збереження екземпляру типу, що визначається вказівником, і повертає адресу цієї області у вказівнику.

S^. Init('Рanкo','10.10.1995',550);

Потім виклики методів можуть відбуватися у звичайному порядку, з використанням імені вказівника і символу ^ замість імені екземпляра об’єкту, що використовувався б при звертанні до статично розміщеного об’єкту.

 

Name:=S^.GetName;

 

Розширене використання оператора New

Pascal використовує розширений синтаксис процедури New, який дозволяє одночасно виділяти пам’ять для об’єкту в динамічній області та ініціалізувати сам об’єкт за допомогою виклику його конструктора. Тепер процедура New може викликатися з двома параметрами: ім’я вказівника використовується в якості першого параметра, а ім’я конструктора – в якості другого параметра.

 

New(S, Init('Рanкo','10.10.1995',550);

 

При використанні розширеного синтаксису процедури New конструктор Init виконує динамічне розміщення об’єкту, використовуючи спеціальний згенерований код, що викликається оператором CONSTRUCTOR і виконується до основного коду конструктора. Ім’я екземпляра об’єкту не може використовуватися в якості першого параметра процедури, оскільки під час виклику процедури New екземпляр, що ініціалізується за допомогою Init, ще не існує. Компілятор визначає правильність виклику конструктора, перевіряючи тип вказівника, що передається в якості першого параметра.

Процедура New також може використовуватися в якості функції, що повертає значення вказівника. Параметр, який передається New, цього разу повинен бути типом вказівника на об’єкт, а не самим об’єктом.

TYPE

SStudent=^TStudent;

VAR

S:SStudent;

 

S:=New(SStudent);

 

Використання процедури New як функції може застосовуватися до всіх типів даних, а не тільки до об’єктів.

В якості другого параметра процедура New може містити конструктор об’єктного типу

S:=New(SStudent, Init('Рanкo','10.10.1995',550);

 


<== попередня лекція | наступна лекція ==>
Процедура Dispose | Виявлення помилок конструктора


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн