- •Лабораторна робота №1
- •Теоретичні положення
- •Хід роботи
- •Варіанти
- •Контрольні запитання
- •Лабораторна робота №2
- •Теоретичні відомості
- •Лабораторна робота №4
- •Теоретичні відомості
- •Хід роботи
- •Хід роботи
- •Контрольні запитання
- •Контрольні запитання
- •Лабораторна робота №5
- •Теоретичні відомості
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 8
- •Теоретичні відомості
- •Контрольні запитання
- •Лабораторна робота № 10
- •Абстрактні класи
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 11
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №12
- •Теоретичні положення
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 13.
- •Теоретичні положення
- •Хід работи
- •Варіанти
- •Література
Хід роботи
За прикладом, що наведений нижче, переробити програму з лабораторної роботи №1. Для об’єктів класу створити конструктор без параметрів, конструктор з параметрами, конструктор копіювання.
#include <iostream> #include <conio.h>
using namespace std;
class mas { int size; int *p; public: mas(){}; mas & operator = (mas & a); void Destroy(); mas(const mas & a);
//конструктор ініціалізації mas(int s) { p = new int [s]; size = s; } //кількість елементів в масиві int GetSize() { return size; }
void PutMas(int i); int GetMas (int i); //деструктор ~mas() { Destroy(); } };
//перевантажений конструктор копіювання mas::mas(const mas &a) { p = new int [a.size]; for (int i = 0; i < a.size; i++) *(p+i) = *(a.p+i); size = a.size; } //перевантаження оператору привласнення //копіювання всіх елементів з одного масиву в другій mas & mas::operator =(mas &a) { p = new int [a.size]; for (int i = 0; i < a.size; i++) *(p+i) = *(a.p+i); size = a.size; return *this; } //метод звільнення динамічно виділеній пам’яті void mas::Destroy() { if (size > 0) { delete [] p; size = 0; } } //заповнення масиву void mas::PutMas(int i) { *(p+i) = i; } //повернення елементу масиву int mas::GetMas(int i) { return *(p+i); } void main () { setlocale (0,""); mas a(10); //виклик конструктора ініціалізації mas c;
for (int i = 0; i<10; i++) a.PutMas(i); //конструктор копіювання mas b = a; c = b;
cout<<"c = "; for (int i = 0; i<10; i++) { cout<<c.GetMas(i)<<" ";} cout<<"\na = "<<a.GetSize()<<"\n"; cout<<"b = "<<b.GetSize()<<"\n"; cout<<"c = "<<c.GetSize()<<"\n";
//виклик методу звільнення виділеної пам’яті a.Destroy(); //деструктор, якій містить метод Destroy() b.~mas(); c.~mas(); //вивід кількості об’єктів масивів після звільнення пам’яті cout<<"\na = "<<a.GetSize()<<"\n"; cout<<"b = "<<b.GetSize()<<"\n"; cout<<"c = "<<c.GetSize()<<"\n"; getch(); }
Контрольні запитання
Дайте визначення конструктору.
Для чого використовується перевантаження конструкторів?
Чи можна перевантажувати деструктор?
Лабораторна робота № 8
Тема: Перевантаження операторів.
Мета: Ознайомитися з поняттям перевантаження операцій. Спроектувати и написати програму, яка використовує ці поняття.
Література: Г.Шилдт,Самоучитель С++, С.В. Глушков, Практикум по С++.
