Основні частини пам’яті програми.
- код програми (містить команди програми й бібліотечних функцій, які викликаються у програмі);
– статична пам’ять (зберігає статичні змінні, що існують протягом усього процесу виконання програми);
– автоматична пам’ять, або програмний стек (містить змінні, локальні у викликах функцій);
– вільна пам’ять (містить дані, що створюються під час виконання програми за її вказівками).
Чим динамічні змінні відрізняються від статичних та автоматичних з погляду програми мовою високого рівня.Розмір вільної пам’яті обмежений тільки наявною пам’яттю комп’ютера, яку не зайнято іншими програмами. Це дозволяє створювати й обробляти масиви значно більшого розміру ніж у статичній або автоматичній пам’яті.
Чому змінні у вільній пам’яті називаються динамічними;Вони не мають імен у програмі й позначаються за допомогою встановлених на них вказівників.
Які операції мови С++ створюють і знищують динамічні змінні, що є їхніми операндами й результатами;Операція 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;У класі означено операції присвоювання =, дописування +, дописування з присвоюванням +=, порівняння ==, !=, <, <=, >, >=, уведення з потоку >>, виведення в потік <<, індексації [] й деякі інші.
Що таке успадкування й яка від нього користь.Успадкування класів полягає в тому, що в оголошенні нового класу (нащадка, або похідного класу) використовують інший, раніше оголошений клас (батько, або базовий клас), до полів якого додають атрибути й методи. Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.
Що визначає специфікатор доступу в оголошенні успадкування.Специфікатор доступу - ключове слово перед назвою батька-нащадку в оголошенні - визначає одну з трьох різних можливостей доступу до полів базового класу за межами похідного.