
- •ВСТУП
- •ОСНОВНІ ПОНЯТТЯ ОБ’ЄКТНО-ОРІЄНТОВАНОГО ПРОГРАМУВАННЯ
- •Контрольні запитання
- •ОСОБЛИВОСТІ ОБ’ЄКТНОЇ МОДЕЛІ В С++
- •Контрольні запитання
- •ІНІЦІАЛІЗАЦІЯ І ЗНИЩЕННЯ ОБ’ЄКТІВ. КОНСТРУКТОРИ ТА ДЕСТРУКТОРИ
- •ДИНАМІЧНИЙ РОЗПОДІЛ ПАМ’ЯТІ
- •Контрольні запитання
- •ДОСТУП ДО ПОЛІВ ТА МЕТОДІВ КЛАСУ. СТАТИЧНІ ЧЛЕНИ КЛАСУ
- •РЕАЛІЗАЦІЯ МЕХАНІЗМІВ УСПАДКУВАННЯ ТА ПОЛІМОРФІЗМУ В С++. ДОСТУП ДО ЧЛЕНІВ БАЗОВИХ КЛАСІВ
- •Контрольні запитання
- •ДРУЗІ КЛАСУ
- •ШАБЛОНИ КЛАСІВ
- •ПЕРЕВАНТАЖЕННЯ ОПЕРАТОРІВ ДЛЯ КЛАСІВ
- •Контрольні запитання
- •СТАТИЧНІ ТА ДИНАМІЧНІ МАСИВИ
- •Методи сортування масивів.
- •Сортування за допомогою включення
- •Сортування за допомогою прямого выбору
- •Сортування за допомогою обміну
- •Методи пошуку у масивах
- •Прямий лінійний пошук
- •Бінарний пошук
- •Контрольні запитання
- •СПИСКИ. СОРТУВАННЯ СПИСКІВ, ПОШУК У СПИСКАХ
- •Контрольні запитання
- •СТЕКИ
- •Контрольні запитання
- •ЧЕРГИ ПРОСТІ ТА ЦИКЛІЧНІ
- •Прості черги
- •Циклічні черги
- •Контрольні запитання
- •БІНАРНІ ДЕРЕВА
- •Доступ до елементів дерева. Сортування бінарних дерев. Пошук у бінарних деревах
- •Контрольні запитання
- •КОНТРОЛЬНА РОБОТА
- •Порядок виконання лабораторних робіт :
- •Порядок захисту робіт.
- •Лабораторна робота №1.
- •Лабораторна робота №2.
- •Лабораторна робота №3.
- •Лабораторна робота №4.
- •Лабораторна робота №5.
- •СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
ДИНАМІЧНИЙ РОЗПОДІЛ ПАМ’ЯТІ
Для більш ефективного використання пам’яті часто доводиться розроблювати класи, в яких розмір об’єкту залежить від даних, що в ньому зберігаються. В таких структурах часто об’єм потрібної пам’яті стає відомим лише безпосередньо перед ініціалізацією конкретного об’єкта даного класу. Це призводить до необхідності динамічного керування пам’яттю. Для цих цілей в С++ передбачено два оператори new та delete. Оператор new дозволяє виділити пам’ять об’єкту, оператор delete дозволяє звільнити пам’ять
Динамічний розподіл пам’яті вимагає використання покажчиків. Розглянемо приклади.
Динамічне виділення пам’яті під одновимірний масив
float* y; y=new float [5];
Очищення пам’яті, виділеної динамічно під одновимірний масив
delete y;
Динамічне виділення пам’яті під двовимірний масив
float** y; y=new float* [5];
for(i=0;i<5;i++) {y[i]= new float[5] };
Очищення пам’яті, виділеної динамічно під двовимірний масив
for(i=0;i<5;i++) {delete y[i] }; delete y;
Зрозуміло, що оператор new використовується в конструкторі, а оператор delete в деструкторі. Розглянемо приклад.
Нехай нам потрібен клас одновимірний вектор, розмір якого визначається у момент ініціалізації. Такий клас повинен мати конструктор з параметром, що вказує на розмір вектора та конструктор за замовчуванням, щоб не виникали аварійні ситуації при ініціалізації без параметрів. Будемо
20
вважати, що за замовчуванням наш вектор буде тривимірним. Щоб не ускладнювати приклад в описі класу покажемо лише конструктори та деструктори, а інші необхідні методи не показуватимемо.
class MyVector
{
private:
float *v; int size;
public:
MyVector(){size=3; v= new float[size];}; //конструктор за замовчуванням MyVector(int a) {size= a; v= new float[size];}; //конструктор з параметром ~MyVector(){delete[] v;};//деструктор
...
};
Контрольні запитання
1.Що таке конструктор?
2.Навіщо потрібен конструктор?
3.Як формується ім’я конструктора?
4.Що таке деструктор?
5.Як формується ім’я деструктора?
6.Навіщо потрібен деструктор?
7.Що таке конструктор за замовчуванням?
8.Скільки конструкторів може мати клас?
9.Скільки деструкторів може мати клас?
10.Для чого використовується оператор new?
11.Для чого використовується оператор delete?
21