русс | укр

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

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


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


Присвоювання об’єктів


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


З уміння об’єктів успадковувати випливають нові правила присвоювання для змінних типу «об’єкт» (екземплярів). Їм можна присвоювати не тільки значення цього ж типу, але й будь-якого похідного від них. Аналогічне правило сумісності типів діє при передачі в процедуру чи функцію параметрів типу «об’єкт». Наприклад, якщо у програмі оголошені змінні типу «об’єкт»

VAR

St:Tstudent;

St1:Tstudent1;

то для копіювання значення, записаного у змінній St1, у змінну St2 достатньо виконати присвоювання

St:=St1;

Подібна операція заповнить поля даних у St значеннями аналогічних полів, успадкованих St1 (тобто полів Name, Date, Rate). Методи таким способом не присвоюються. Оскільки похідний тип завжди має не менше полів даних, ніж прабатьківський, операція можлива саме у такий спосіб:

Прабатько:=Спадкоємець;

При цьому гарантується заповнення всіх полів змінної, що стоїть зліва. Інакше виникла б невизначеність із «зайвими» полями, присутніми у правій змінній. Щоб уникнути такої невизначеності, забороно ставити «породжений» тип зліва від прабатьківського.

Змінні типу «об’єкт» можуть бути динамічними, тобто оголошуватися як вказівники.

VAR

Dyn_St: ^TStudent;

Dyn_St1: ^TStudent1;

Після створення динамічних об’єктів процедурою чи функцією New вказівники (як розіменовані, так і самі по собі) можуть присвоюватися один одному. Правила сумісності залишаються тими ж: коректними будуть лише присвоювання вказівників на спадкоємців вказівникам на прабатьків.

Dyn_St:= Dyn_St1;

Dyn_St^:= Dyn_St1^;

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

Procedure Show_Fields(Obj:TStudent);

то допустимими типами фактичних параметрів можуть бути TStudent i TStudent1.

А в такому випадку

Procedure Show_Fields(Obj:TStudent1);

допустимий тип фактичних параметрів лише TStudent1.


<== попередня лекція | наступна лекція ==>
Тема 2 Об’єктно-орієнтоване програмування в Pascal. Успадковування. Інкапсуляція | Приховування даних в об’єктах


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