Основні частини пам’яті програми.

- код програми (містить команди програми й бібліотечних функцій, які викликаються у програмі);

– статична пам’ять (зберігає статичні змінні, що існують протягом усього процесу виконання програми);

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

– вільна пам’ять (містить дані, що створюються під час виконання програми за її вказівками).

Чим динамічні змінні відрізняються від статичних та автоматичних з погляду програми мовою високого рівня.Розмір вільної пам’яті обмежений тільки наявною пам’яттю комп’ютера, яку не зайнято іншими програмами. Це дозволяє створювати й обробляти масиви значно більшого розміру ніж у статичній або автоматичній пам’яті.

Чому змінні у вільній пам’яті називаються динамічними;Вони не мають імен у програмі й позначаються за допомогою встановлених на них вказівників.

Які операції мови С++ створюють і знищують динамічні змінні, що є їхніми операндами й результатами;Операція new з ім’ям типу як операндом створює динамічну змінну цього типу; значенням операції є адреса змінної.

Операція delete, операндом якої є ім’я вказівника, скажімо, delete p, звільняє ділянку пам’яті, на яку встановлено вказівник (знищує динамічну змінну).

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

Знищення динамічної змінної за допомогою операції delete;Операція delete p знищує не вказівник p, а змінну, на яку він вказує. Після звільнення вказівник продовжує вказувати на неї.

Чи можна повторно знищити одну й ту саму динамічну змінну;Залежно від компілятора спроба доступу до вже знищеної змінної може бути допустимою, або бути помилковою, або аварійно закінчувати програму (як і спроба звільнити вже звільнену змінну).

Чому для класів, об’єкти яких містять вказівники, як правило, необхідні власні конструктори, конструктори копії та деструктори;Якщо об’єкти містять поля-вказівники, то стандартних конструкторів зазвичай недостатньо. Адже, коли стандартний конструктор створює об’єкт, значенням вказівника в об’єкті є якась випадкова адреса. Спроба скористатися нею дає непередбачувані наслідки. Копіювання ж полів з іншого об’єкта призводить до того, що вказівники в різних об’єктах вказують на одну й ту саму змінну, що бажано далеко не завжди. Отже, якщо об’єкти класу містять вказівники, зазвичай необхідні власні конструктори.

Неглибоке та глибоке копіювання, різниця між ними;копіювання значень полів об’єкта називається неглибоким. Глибоке копіювання – копіювання всіх або деяких даних, досяжних з об’єкта за допомогою вказівників.

Чому неглибокого копіювання, як правило, недостатньо для роботи з об’єктами, що містять вказівники;

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

Створення й знищення динамічного масиву за допомогою операцій new й delete;

p – вказівник типу T*. Присвоювання

p = new T [n]

створює масив елементів типу T з індексами 0, 1, …, n-1 і встановлює p на його перший елемент

Операція delete звільняє пам’ять з-під динамічного масиву. Якщо вказівник p встановлено на початок масиву, то масив знищується так.

delete [] p;

Що таке абстрактний тип даних і його реалізація;АТД – це набір операцій, що мають певні властивості, з деякими абстрактними елементами. Що це за елементи, АТД «не каже». На основі АТД можна створити реалізацію АТД – вибрати конкретну множину значень, тобто даних, організованих у певний спосіб, і написати підпрограми, що реалізують операції.

Опишіть поняття «стек»; Стек – це спосіб обробки даних, що додаються до деякого набору й вилучаються з нього за принципом LIFO (Last In, First Out – «останнім прийшов, першим пішов»).

Опишіть поняття «черга»;– це спосіб обробки даних, що додаються до деякого набору й вилучаються з нього за принципом FIFO (First In, First Out – «першим прийшов, першим пішов»).

Чи можна за допомогою двох стеків проімітувати роботу з чергою;

Звичайно що можна

Завдяки чому довжина рядкових значень об’єктів типуstringне обмежена певним значенням;

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

Які оператори мови С++ застосовні до операндів типу string;У класі означено операції присвоювання =, дописування +, дописування з присвоюванням +=, порівняння ==, !=, <, <=, >, >=, уведення з потоку >>, виведення в потік <<, індексації [] й деякі інші.

Що таке успадкування й яка від нього користь.Успадкування класів полягає в тому, що в оголошенні нового класу (нащадка, або похідного класу) використовують інший, раніше оголошений клас (батько, або базовий клас), до полів якого додають атрибути й методи. Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

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