Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
відповіді ооп( більше половини).docx
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
165.75 Кб
Скачать
  1. Проаналізуйте поняття «час життя» об'єкта та його «область видимості».

Час життя – це інтервал часу виконання програми під час якого об’єкт існує. Час життя змінної може бути локальним або глобальним.

Глобальна змінна може бути доступна з моменту її визначення до кінця програми, локальна змінна дотупна тільки в ф-ї або блоці в якому вона визначена, при кожному входжені в блок, виконується визначення лок. змінної і розподіл пам’яті для неї. Всі ф-ї в мові Сі мають глобальний час життя.

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

23).Класи пам’яті. Використання автоматичної, статичної та динамічної пам’яті для розміщення об’єктів.

Клас пам'яті задає місце розташування об'єкта в оперативній пам'яті та встановлює для нього час існування, тобто час, протягом якого об‘єкт зберігається в оперативній пам‘яті, і область видимості, яка визначає ту частину програми, де можна використовувати цей об‘єкт. На відміну від типу, клас пам’яті можна явно не вказувати, тоді він встановлюється компілятором за місцем оголошення об'єкта.

Звичайні об’єкти живуть протягом терміну активності їх області видимості: створюються при вході в блок і знищуються при виході з нього. Такий спосіб управління пам’яттю називається автоматичним і, відповідно, об’єкти автоматичними. Альтернативою автоматичному служить статичне управління пам’яттю і статичні об’єкти. Статичні об’єкти створюються компонувальником і живуть весь час виконання програми. Проміжне становище займають динамічні об’єкти. Вони створюються і знищуються в довільні моменти часу в результаті виконання відповідних інструкцій.

Глобальні об’єкти завжди статичні. Локальні об’єкти теж можуть бути статичними. Якщо блок, в якому їх видно, активізується багатократно, то при кожному повторному вході в блок зберігається значення статичного об’єкту, яке він набув при виході з блоку.

24). Розкрийте суть проблеми "висячих" посилань і “сміття”.

Різні помилкові сценарії, що виникають в процесі утилізації сміття, можуть бути зведені до двох основних проблем (для простоти викладу вважатимемо, що програма написана на мові, в якій допускається явне управління пам'яттю):

1. Припустимо, що програміст створює дві різних змінних, вказуючих на одну і ту ж структуру даних, а потім знищує одну із змінних разом з її вмістом (тобто знищення пам'яті разом з утилізацією). Після цього друга змінна указує на невизначену область пам'яті. Такі змінні називаються висячими посиланнями. Приведемо приклад на З:

void* p = malloc (32000);

q = p;

free (p); // звільняє пам'ять, на яку указує p, але покажчик в q не

// знищується і виникає висяче посилання

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

void* p = malloc (32000);

p = q; // знищує єдиний покажчик на пам'ять, роблячи її сміттям

Можна сказати, що висячі посилання виникають в тих випадках, коли пам'ять утилізувалася "дуже швидко" (тобто раніше, ніж пам'ять дійсно перестає використовуватися), а сміття — коли пам'ять утилізувалася "дуже поволі" (тобто пізніше, ніж вона могла б бути повернена). Висячі посилання небезпечніші, оскільки можуть приводити до некоректної роботи програми, тоді як поява сміття цілком допустимо. Боротьбу із сміттям зазвичай покладають на спеціальний процес, званий збіркою сміття (garbage collection).

25). Охарактеризуйте автоматичну пам'ять та використання її у програмах. Локальне середовище.

26. Опишіть ієрархію простих та складних типів даних для реалізації об’єктно-орієнтованих програм на мові С++ .

Тип даних – це набір значень однакової природи разом із операціями, які над ними розглядаються. Кожен тип даних визначає:

  • внутрішнє подання даних у пам’яті комп’ютера;

  • множину значень, яку можуть приймати величини цього типу;

  • операції і функції, які можна застосовувати до величин цього типу.

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

Типи данихосновні (цілі, дійсні символьні, логічні) та складені (масиви, перераховувальний, структури, об’єднання, посилання, вказівники, класи)

У С/C++ змінні повинні бути описані, а їхній тип специфікований до того, як ці змінні будуть використані.

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

Наприклад: .

float weight; int exam_score, max, min, i; char ch, c, symbol;

Змінні можна ініціалізувати в місці їхніх описів, наприклад:

int height = 71; float income = 26034.12;

Найпростішими скалярними типами, визначеними в С, є:

сhar — представляється як однобайтове ціле число;

int — двобайтове ціле;

long — чотирибайтове ціле;

float — чотирибайтове раціональне;

double — восьмибайтове раціональне;

Існують чотири специфікатори типу, які уточнюють внутрішнє подання даних типів – short, long, signed, unsigned

цілі:

unsigned char | 8 біт | 0..255

char 1 | 8 біт | 128..127

enum | 16 біт | -32,768..32,767

unsigned int | 16 біт | 0..65,535

short int | 16 біт | -32,768..32,767

int | 16 біт | -32,768..32,767

unsigned long | 32 біт | 0..4,294,967,295

long | 32 біт | -2,147,483,648..2,147,483,647

дійсні:

float | 32 біт | -3.4*1038..3.4*1038

double | 64 біт | -1.7*10308..1.7*10308

long double  | 80 біт | -3.4*104932..1.1*10*104932

логічний: bool (true, false) 8 біт

27. Охарактеризуйте типовані константи та пеpераховуваний тип у мові С++.

Константи у мові С++ використовуються для представлення значень, що не змінюються в процесі роботи програми. Константи використовуються у виразах справа від знаку присвоювання. Різним типам даних у мові C++ відповідає чотири типи констант: