- •Лабораторна робота №1
- •Теоретичні відомості
- •Завдання для виконання
- •Int main()
- •Int main()
- •Лабораторна робота №2
- •Теоретичні відомості
- •Void main()
- •Int k,m; //опис змінних
- •Void main()
- •Int k,m; //опис змінних
- •Void main()
- •Int k,m; //опис змінних
- •Void main()
- •Int k,m; //опис змінних
- •Void main()
- •Завдання для виконання
- •Лабораторна робота №3
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void main()
- •Void main()
- •Int main()
- •Завдання для виконання
- •Лабораторна робота №4
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void main ( )
- •Void main ( )
- •Завдання для виконання
- •Лабораторна робота №5
- •Теоретичні відомості
- •Void main()
- •Void main()
- •Приклади виконання завдання
- •Void main ( )
- •Void main ( )
- •Завдання для виконання
- •Лабораторна робота №6
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void main ( )
- •Void main ( )
- •Void main ( )
- •Завдання для виконання
- •Лабораторна робота №7
- •Теоретичні відомості
- •Void fact(int k);
- •Void fact(k);
- •Int *I; //Вказівник - змінна на дані типу int
- •Int k, *vk; //Опис змінної - вказівника *vk
- •Приклади виконання завдання лабораторної роботи
- •Int fact(int n)// Функція, що обчислює n!
- •Void dryk(int Cnm) /* Функція, що виводить на екран значення Cnm */
- •Void main ( )
- •Int Factorial(int n) /*Рекурсивна функція,що обчислює n! */
- •Void main()
- •Void Vs(double &V, double &s, double r)
- •Void main ( )
- •Void Vs(double *V, double *s, double r)
- •Void main ( )
- •Void main()
- •Завдання для виконання
- •Лабораторна робота №8
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void main()
- •Void main()
- •Void main()
- •Завдання для виконання
- •Лабораторна робота №9
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void main()
- •If (!feof(f1))
- •Void main()
- •Void main()
- •Void main()
- •Void main ()
- •Void main ()
- •Ifstream in( "vvid" );
- •In.Close();
- •Завдання для виконання
- •Лабораторна робота №10
- •Теоретичні відомості
- •Char st[40]
- •Char st3[100]
- •Char str4[100]
- •Приклади виконання завдання
- •Void main()
- •Void insert (char *str, int p, char c)
- •Void main()
- •Insert(s,n,c);
- •Void main()
- •Завдання для виконання
- •Лабораторна робота 11
- •Теоретичні відомості
- •If(!strcmp(ms[I].Ngr,"m21"))
- •Завдання для виконання
- •Приклади виконання завдання
- •Void main()
- •Лабораторна робота 12
- •Теоретичні відомості
- •Void show_complex() /*вивід комплекснеого числа на екран */
- •Void show_complex();
- •Void complex::show_complex()
- •Void main()
- •Приклади виконання завдання
- •Завдання для виконання
- •Лабораторна робота 13
- •Теоретичні відомості
- •Приклади виконання завдання
- •Void operator --();
- •Void operator --(int);
- •Void show_complex();
- •Завдання для виконання
- •Завдання для самостійного виконання
- •Додаток №2. Базові типи даних
- •Додаток №3. Основні специфікатори формату функції printf
- •Додаток №5. Основні математичні функції бібліотеки math.H
- •Додаток №6.
- •Додаток №7. Можливі специфікатори аргументу mode
- •Додаток №8. Основні функції для роботи із рядковими змінними бібліотеки string.H
- •Додаток №9. Основні функції для роботи із символами бібліотеки ctype.H
- •Література
- •Ткачук Валерій Михайлович
- •Лабораторний практикум
- •76000, М. Івано-Франківськ, вул. С. Бандери, 1
Лабораторна робота 13
Тема роботи: Програмування класів: конструктор, деструктор, перевантаження операторів
Мета роботи: Формування навиків роботи із класами з використанням перевантажених операцій, конструкторів та деструктора.
Для виконання роботи необхідно знати:
опис класу;
доступ до відкритих та закритих членів класу;
поняття конструктора, його призначення та опис;
поняття деструктора, його призначення та опис;
перевантаження операцій та їх опис.
Теоретичні відомості
Конструктор – це функція-метод класу з таким самим ім’ям, як у класу. Він призначений для створення та ініціалізації об’єктів класу та присвоєння початкових значень їх полям. В класі може бути визначено кілька конструкторів, які відрізняються списком параметрів. При створенні об’єктів класу викликатися буде (перевантаження конструктора) конструктор із відповідною кількістю та типом вхідних параметрів. Конструктор може мати вхідні параметри, а може їх і не мати. Конструкттор, який не має вхідних параметрів називається конструктором за замовчуванням.
Клас може і не мати конструктора у явному вигляді. Тоді розподіл пам’яті та ініціалізація об’єкту виконуються системою автоматично стандартним шляхом. Стандартна процедура не враховує особливостей класу, тому може бути некоректною і приводити до помилок в роботі програми.
Деструктор – це функція-метод класу, яка відповідає за коректне вивільнення пам’яті при знищенні об’єкту. Деструктор завжди має ім’я класу, перед яким ставиться символ „~”. Якщо деструктор у програмі не визначено, то він генерується на етапі компіляції програми автоматично. Локальні об’єкти видаляються деструктором тоді, коли вони виходять за межі області видимості, о глобальні об’єкти – по завершенні роботи функції main(). Деструктор, при необхідності, може виконувати і будь-які інші дії – вивід кінцевих значень елементів даних чи текстових повідомлень при налагодженні програми.
Конструктори і деструктори не можуть повертати значень і тому при їх описі відсутній тип результату (див. приклад №1).
В С++ визначено ряд операцій (+, - , * , / і. т.д.) при роботі зі змінними стандартних типів. Перевантаження операторів дозволяє призначити відповідні операції при їх використанні до елементів-членів власного класу. Компілятор відрізняє різні функції за числом і типом параметрів і операндів. Основними перевантаженими операціями є: +; -; *; /; %; =; <; >; +=; -=; *=; /=; <; >; &&; ||; ++; --. При цьому перевантажена операція є членом класу і може використовуватися тільки у виразах із об’єктами свого класу.
Для перевантаження операції в середині класу необхідно написати відповідні функції-методи класу. Для визначення нової, перевантаженої дії, операції використовується ключове слово operator згідно наступного синтаксису:
унарна операція:
void operator <символ оператора>() (префіксний оператор)
void operator <символ оператора>(int) (постфіксний оператор)
бінарна операція:
<тип> operator <символ оператора>(<тип1> <імя змінної>)
де:
<тип> - тип значення, що повертається операцією;
<символ оператора> - символ перевантаженої операції;
<тип1> - тип другого операнду (першим операндом є член класу);
<імя змінної> - ім’я змінної другого операнду.
Приклади унарних операцій:
префіксна операція збільшення дійсної частини комплексного числа на 1 може мати наступний вигляд:
void operator ++();
. . . .
void complex::operator ++()
{
x++;
};
постфіксна операція зменшення уявної частини комплексного числа на 1 може мати наступний вигляд:
void operator ++(int);
. . . .
void complex::operator ++(int)
{
y--;
};
Приклади бінарних операцій:
операція додавання двох комплексних чисел:
complex operator +(complex );
. . . .
complex complex::operator +(complex a)
{
complex temp(0.);
temp.x=x+a.x;
temp.y=y+a.y;
return temp;
};
Операція додавання двох комплексних чисел з використанням вказівника this : вказівник на екземпляр об’єкту класу, для якого виконується метод. Він використовується для отримання доступу до самого об’єкту в тілі члена-функції без його додаткового оголошення. Наприклад:
complex operator +(complex );
. . . .
complex complex::operator +(complex a)
{
x=x+a.x;
y=y+a.y;
return *this;
};
Приклади операцій присвоєння:
операція присвоєння =
complex operator =(complex );
. . . .
complex complex::operator =(complex a)
{
x=a.x;
y=a.y;
return *this;
};
Примітка: якщо операція присвоєння не перевантажена явно, то по замовчуванню у виразі x=y відбувається побайтове копіювання даних об’єкту y в дані об’єкту x.
операція присвоєння -=
complex operator -=(complex );
. . . .
complex complex::operator -=(complex a)
{
x-=a.x;
y-=a.y;
return *this;
};
Приклади логічних операцій:
операція порівняння двох комплексних чисел:
bool operator ==(complex);
. . .
bool complex::operator== (complex other)
{
if(m_re == other.m_re && m_im == other.m_im)
{
return true;
}
return false;
};
