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

– код програми (містить команди програми);

– бібліотечні функції, які викликаються у програмі;

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

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

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

Чим динамічні змінні відрізняються від статичних та автоматичних з погляду програми мовою високого рівня;Ділянки пам’яті під динамічні змінні виділяються та звільнюються явними вказівками у С++-програмі і не залежать від часу існування програми чи її окремих блоків.

Чому змінні у вільній пам’яті називаються динамічними;Тому, що пам’ять під змінні виділяється з «купи» - вільної пам’яті комп’ютера, яка не задіяна на даний момент. Змінна утворюється з передбаченою кількістю пам’яті, якщо її можливо виділити, а використовувана нею пам’ять стає недоступною у вільній пам’яті до моменту винищення вільної змінної.

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

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

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

T *p = new T;

if(p != 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;У класі означено операції присвоювання =, дописування +, дописування з присвоюванням +=, порівняння ==, !=, <, <=, >, >=, уведення з потоку >>, виведення в потік <<, індексації [] й деякі інші.

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

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