You are on page 1of 23

Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Лабораторна робота №3 (2023)


Тема: Основи Об’єктно – орієнтоване програмування мовою С++.
Класи. Протокол класу. Конструктори та деструктори.

Методичні вказівки
1. Основи об’єктно-орієнтованого програмування мовою С++
2. Класи. Протокол класу.
3. Дані та функції класів.
4. Конструктори та деструктори.

1. Основи об’єктно – орієнтованого програмування мовою С++

Розвиток технологій програмування привело до виникнення об’єктно-орієнтованого


підходу до програмування (ООП). Об'єктно-орієнтоване програмування (OOP, object-oriented
programming) методологія програмування, заснована на представленні програми у вигляді
сукупності об'єктів, кожен з який є реалізацією певного типу, що використовує механізм
пересилання повідомлень і класи, організовані в ієрархію успадкування. Основні передумови
виникнення ООП.
1. Зростання складності програм. Сучасні програми містять понад 10000 рядків коду.
Налагодження та супровід таких програм стає дуже складним. Часто при зміні коду в одному
місті програми виникають непередбачені помилки в інших місцях програми. ООП зводить
програмування до побудови нових або використання готових класів. Кожен об’єкт є незалежним
та проводить обмін даних з іншими об’єктами через відповідні функції, таким чином, що зміна
внутрішньої реалізації класу впливає тільки на роботу об’єктів даного класу;
2. ООП дозволяє зручно представляти в певному наближені об’єкти реального світу в
термінах об’єктно-орієнтованої мови програмування (особливо використовуючи механізми
наслідування та контейнеризації), що значно спрощує складання складних програм.
Центральний елемент ООП - абстракція. Дані за допомогою абстракції перетворюються в
об'єкти, а послідовність обробки цих даних перетворюється на набір повідомлень, переданих між
цими об'єктами. Кожен з об'єктів має своє власне унікальне поведінку. З об'єктами можна
поводитися як із конкретними сутностями, які реагують на повідомлення, наказуючі їм виконати
якісь дії.
ООП характеризується наступними принципами за Алану Кею(основоположником мови
мови Smalltalk, якого вважають одним з «батьків-засновників» ООП, об’єктно-зорієнтованого
підхіду):
- все є об'єктом;
- обчислення здійснюються шляхом взаємодії (обміну даними) між об'єктами, при якому
один об'єкт вимагає, щоб інший об'єкт виконав деяку дію; об'єкти взаємодіють, посилаючи й
одержуючи повідомлення; повідомлення - це запит на виконання дії, доповнений набором
аргументів, які можуть знадобитися при виконанні дії;
- кожен об'єкт має незалежну пам'ять, яка складається з інших об'єктів;
- кожен об'єкт є представником класу, який висловлює загальні властивості об'єктів даного
типу;
- в класі задається функціональність (поведінка об'єкта); тим самим усі об'єкти, які є
екземплярами одного класу, можуть виконувати одні і ті ж дії;
- класи організовані в єдину деревоподібну структуру з загальним корінням, звану
ієрархією спадкування; пам'ять і поведінку, пов'язане з примірниками певного класу,
автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві.

1
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Означення 1. Абстрагування (абстракція, abstraction) - метод розв'язання задачі, при якому


об'єкти різного роду об'єднуються загальним поняттям (концепцією), а потім згруповано суті
розглядаються як елементи єдиної категорії.
Абстрагування дозволяє відокремити логічний зміст фрагмента програми від проблеми його
реалізації, розділивши зовнішнє опис (інтерфейс) об'єкта та його внутрішню організацію
(реалізацію).
Означення 2. Інкапсуляція (encapsulation) - техніка, при якій не суттєва з точки зору
інтерфейсу об'єкта інформація ховається всередині нього.
Означення 3. Успадкування (inheritance) - властивість об'єктів, за допомогою якого
екземпляри класу отримують доступ до даних і методу класів-предків без їх повторного
визначення.
Успадкування дозволяє різним типам даних спільно використовувати один і той самий код,
приводячи до зменшення його розміру і підвищенню функціональності.
Означення 4. Поліморфізм (polymorphism) - властивість, що дозволяє використовувати
один і той же інтерфейс для різних дій; поліморфної змінної, наприклад, може відповідати кілька
різних методів.
Поліморфізм перекроює загальний код, який реалізує деякий інтерфейс, так, щоб
задовольнити конкретним особливостей окремих типів даних.
Означення 5. Клас (class) - множина об'єктів, пов'язаних спільністю структури і поведінки;
абстрактне опис даних і поведінки (методів) для сукупності схожих об'єктів, представники якої
називаються екземплярами класу.
Означення 6. Об'єкт (object) - конкретна реалізація класу, що володіє характеристиками
стану, поведінки та індивідуальності, синонім екземпляра.
Значно більш широкий список основних термінів ООП буде наведено пізніше. Слід мати на
увазі, що в різних об'єктно-орієнтованих мовах для позначення одних і тих же концепцій ООП
використовуються злегка відрізняються один від одного терміни.
Об'єктно-орієнтоване програмування сягає своїм корінням до створення мови
програмування Симула в 1960-тих роках. На сьогодні багато із мов програмування (зокрема, C++,
Java, C#, ActionScript , Python, PHP, Ruby та Objective-C) підтримують ООП. Мова С++ підтримує
класичну форму ООП, вона активно використовується професійними програмістами.

2. Класи. Протокол класу. Конструктори та деструктори.


Клас – це створення нового типу (клас це – тип) розширення поняття структури мови С.
Клас – тип даних, за допомогою якого крім набору типу даних можна задавати набір функцій
для роботи з ними. Дані класу називаються елементами даних або полями (за аналогією з
полями структури), а функції класу методами. Поля та методи називаються елементами
класу. Опис класу:
class ім'я_класу <: предки >{
<опис елементів класу> .. // Протокол визначення класу
} <об’єкти класів > ; // Опис закінчується крапкою з коми
Опис елементів класу – це визначення даних та опис(декларація) або визначення функцій.
Опис елементів містить один або кілька специфікацій доступу до елементів, що задають за
допомогою ключових слів public, private або protected, вони керують видимістю елементів
класу. Елементи, описані після службового слова private, доступні тільки усередині класу. Цей
вид доступу прийнятий за замовчуванням. Елементи, описані після службового слова public,
доступні для функцій-елементів й інших функцій програми, у якій є представник класу.
Елементи, описані після службового слова protected, доступні тільки усередині класу та при
успадкуванні.

2
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Елементи даних класів можуть мати будь-якого типу, крім типу цього ж класу (але можуть
бути вказівник або посилання на цей клас). Ініціалізація полів при описі класу не допускається.
Класи можуть бути глобальними (оголошеними поза будь-яким блоком) і локальними
(оголошеними усередині блоку, наприклад, функції або іншого класу).
У класі крім звичайний методів(функцій) класу є деякі спеціальні функції, такі, як
конструктори, деструктори, функції перетворення, операції.
Конструктор - функція з тим же ім'ям, що й сам клас без типу. В класі може бути декілька
конструкторів. Деструктор - функція, ім'ям якої є ім'я класу із префікс-тильдою (~) без типів і
без параметрів.
Кожен представник класу називається об'єктом.

Типові приклади завдань до лабораторної роботи


Приклад 1(типовий для завдання 1). Створити клас типу – правильний ікосаедр ( поля :
сторона трикутника, колір). У класі визначити
 конструктори ( не менше двох);
 функції-члени обчислення площі, об'єму, а також радіуси вписаної і описаної куль;
 функції-члени встановлення значень сторони та кольору, функції встановлення полів
класу повинні перевіряти коректність параметрів, що задаються;
 функції-члени що повертають значення полів;
 функцію друку.
Написати програму тестування всіх можливостей цього класу.
Правильний ікосаедр (від грец. εικοσάς, «двадцять» і грец. —εδρον, «грань», «лице»,
«основа») — правильний опуклий многогранник, двадцятигранник. Кожна з 20 граней є рівностороннім
трикутником. Число ребер рівне 30, число вершин — 12.

#include <iostream>
#include <math.h>
using namespace std;

class Icosahedron {
double a; // side icosahedron
unsigned int color;
public:
Icosahedron() : a(1.0), color(0) {}
3
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Icosahedron(double ai) : a(ai), color(0) {}


Icosahedron(int ic) : a(1.0) { if (ic>=0) color = ic; else color =0;}
Icosahedron(double a,int c) {
this->a = a;
if (c>=0) color = c; else color =0;
}
double getA() const
{ return a;}
void setA(double a)
{ if( a<0 || a > 1.e+100)
{ cout<<" Error set a \n";
return ;
}
this->a = a;
}
double getColor() const
{ return color;}
void setColor(int c)
{ if( c<0 || c > 10000)
{ cout<<" Error set color \n";
return ;
}
this->color = c;
}
double S(){
return 5*a*a*sqrt(3.0);
}
double V(){
return 5*a*a*a*(3+sqrt(5.0))/12.0;
}
double r(){
return a*(3+sqrt(5.0))/(4.0*sqrt(3.0));
}
double R() {
return sqrt(2*(5+sqrt(5.0)*a))/4.0;
}
void printInfo()
{
cout<< "\n a= "<<a<<" color = "<<color;
cout<< " S= "<<S()<<" V = "<<V()<< " r= "<<r()<<" V = "<<R()<<endl;
}

};
int main()
{
Icosahedron obj;
obj.printInfo();
double in_a; int in_color;
cout<<" Input side and color Icosahedron "; cin>>in_a>>in_color;
Icosahedron obj1(in_a),obj2(in_color), obj3(in_a,in_color);
obj1.printInfo();
obj2.printInfo();
obj3.printInfo();
obj.setA(-5);
obj.printInfo();
obj.setA(5);
obj.printInfo();
obj.setA(2.e100);
obj.printInfo();
obj.setColor(-10);
obj.printInfo();
obj.setColor(10);
obj.printInfo();
obj.setColor(10001);
4
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

obj.printInfo();
cout<<" End testing \n";
return 0;
}

Приклад 2(типовий для завдання 1). Створити клас типу - стек. Функції-члени вставляють
елемент в стек, витягують елемент з стека. Перевіряють вершину стека.
#include <iostream>
using namespace std;
class Stack {
int *v;
int size;
int top;
public:
Stack() {
size =100;
v = new int[size];
top = 0;
}
Stack(int size) {
this->size =size;
v = new int[size];
top = 0;
}
bool isEmpty()
{ return top?false:true; }
bool isFull()
{ return top==size?true:false; }
bool Push(int elm)
{
if(isFull()) return false;
v[top] = elm;
top++;
return true;
}
int Pop(void)
{
if(isEmpty()) return 0;
top--;
return v[top];
}

};

int main()
{
Stack a;
int i;
if(a.isEmpty() ) cout<<" Stack empty \n";
for(i=0; i<102; i++) a.Push(i+1);
if(a.isEmpty() ) cout<<" Stack empty \n";
if(a.isFull() ) cout<<" Stack Full \n";
while(!a.isEmpty())
cout<<" "<<a.Pop()<<" ";

if(a.isEmpty() ) cout<<"\n Stack empty \n";


return 0;
}
Приклад 3(типовий для завдання2) . Створити тип даних - клас вектор, який має поля x, y
типу double і змінну стану. У класі визначити
o конструктор без параметрів(інінціалізує поля в нуль);
o конструктор з одним параметром типу double (інінціалізує поля);
5
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o конструктор з одним параметром вказівник на тип double (інінціалізує поля x, y


значенням масиву за вказівником, якщо вказівник NULL (nulptr) то встановити
код помилки);
o деструктор із виведенням інформації про стан вектора;
o визначити функції друку, додавання, віднімання, векторний добуток які
здійснюють ці арифметичні операції з даними цього класу;
o функцію ділення на ціле типу double(при діленні на 0 змінити стан, а ділення не
виконувати);
o визначити функцію порівняння менше які повертають true або false.
У змінну стани встановлювати код помилки, діленні на 0, при передачі NULL (nulptr) в
конструкторі із вказівником. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.

#include <iostream>
#include <math.h>
#include <clocale>
using namespace std;
enum STATE {
OK, BAD_INIT, BAD_DIV
};

class Vec2
{
double x, y;
int state;
static int count;
public:
Vec2() : x(0), y(0) { state = OK; count++;
} // конструктор без параметрів
Vec2(double iv) : x(iv), y(iv) { state = OK; count++;
}
Vec2(double ix, double iy);
Vec2(double *v);
~Vec2() {
count--;
cout << " state Vec " << state;
cout << " Vec delete \n";
}
Vec2(const Vec2&);
Vec2 Add(Vec2& d);
Vec2 Sub(Vec2& d);
Vec2 Mul(double d);
Vec2 Div(double d);
void Input(); // !!! Без первантаження операцій
void Output(); // !!! Без первантаження операцій
bool CompLessAll(Vec2& s);
static int getCount() {
if (count <= 0) cout << " Немає об'єктів Vec2 ";
return count; }
int getState() { return state; }
};
int Vec2::count =0;
Vec2::Vec2(double ix, double iy) {
x = ix; y = iy;
state = OK;
count++;
}
Vec2::Vec2(const Vec2& s) {
if (this == &s) return;
x = s.x; y = s.y; state = OK;
count++;
6
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

};
Vec2::Vec2(double *v) {
if (v == nullptr) {
state = BAD_INIT; x = 0; y = 0;
}
else {
x = v[0]; y = v[1];
state = OK;
}
count++;
}
void Vec2::Input(){
cout << " Input x y ";
cin >> x >> y;
}
void Vec2::Output() {
cout << " x =" <<x<<" y = "<<y << " state "<< state<<endl;
}

Vec2 Vec2::Add(Vec2& s) {
Vec2 tmp;
tmp.x = x + s.x;
tmp.y = y + s.y;
return tmp;
}

Vec2 Vec2::Sub(Vec2& s) {
Vec2 tmp;
tmp.x = x - s.x;
tmp.y = y - s.y;
return tmp;
}
Vec2 Vec2::Div(double d) {
Vec2 tmp;
if (fabs(d) < 1.e-25) {
tmp.state = BAD_DIV;
cout << " Error div \n";
return *this;
}
tmp.x = x/d;
tmp.y = y/d;
return tmp;
}
Vec2 Vec2::Mul(double d) {
Vec2 tmp;
tmp.x = x * d;
tmp.y = y * d;
return tmp;
}

bool Vec2::CompLessAll(Vec2& s) {

if( x < s.x && y < s.y) return true;


return false;
}

int main()
{
setlocale(LC_CTYPE, "ukr");
cout << "Тестування створенного класу \n";
cout << "Тестування конструкторiв \n";
Vec2 ObjCDef;
ObjCDef.Output();
Vec2 ObjP1(10.0);
7
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

ObjP1.Output();
double a = 1.0, b = 2.0;
Vec2 ObjP2(a, b);
ObjP2.Output();
Vec2 ObjCopy(ObjP2);
double *v = nullptr, v2[] = { 1.2, 3.3 };
Vec2 ObjP3(v2);
if (ObjP3.getState() != OK) cout << " ObjP3 x= 0 y= 0 \n";
Vec2 ObjP4(v2);
if (ObjP4.getState() != OK) cout << " ObjP4 x= 0 y= 0 \n";
cout << " Кiлькiсть створених об'єктiв Vec2 " << Vec2::getCount() << endl;
cout << "Тестування введення \n";
ObjCDef.Input();
cout << "Тестування функцiй \n";
ObjCDef = ObjCDef.Add(ObjP2);
ObjCDef.Output();
cout << " \n Кiлькiсть створених об'єктiв Vec2 до Sub " << Vec2::getCount() << endl;
ObjCDef = ObjCDef.Sub(ObjP2);
cout << " \n Кiлькiсть створених об'єктiв Vec2 пiсля Sub " << Vec2::getCount() << endl;
ObjCDef.Output();
ObjCDef = ObjCDef.Mul(5);
ObjCDef.Output();
ObjCDef = ObjCDef.Div(1.3);
if(ObjCDef.getState() == STATE::BAD_DIV ) cout << "BAD_DIV \n";
ObjCDef.Output();

ObjCDef = ObjCDef.Div(0.0);
if (ObjCDef.getState() == STATE::BAD_DIV) cout << "BAD_DIV \n";
ObjCDef.Output();
cout << "ObjCopy state " << ObjCopy.getState() << endl;
if(ObjCopy.CompLessAll(ObjCDef)) cout << "ObjCopy less ObjDef " << endl;

cout << "Завершення тестування \n";


return 1;

Приклад 4(типовий для завдання2) . Створити тип даних - клас вектор, який має вказівник
на ComplexDouble, число елементів і змінну стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу).
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функції друку, додавання;
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
#include<iostream>
#include<complex>
using namespace std;
typedef complex<double> ComplexDouble;
class ComplexVector
{
ComplexDouble *v;
int num;
8
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

int state;
public:
ComplexVector() : v(NULL), num(0), state(0) {}
ComplexVector(int n);
ComplexVector(int n, ComplexDouble&);
ComplexVector(int n, ComplexDouble*);
ComplexVector(const ComplexVector& s);
ComplexVector& operator=(const ComplexVector& s);
~ComplexVector() {
cout<<" del vec";
if(v) delete[] v;
}
void Output();
void Input();
ComplexVector Add(ComplexVector &b);

};

ComplexVector::ComplexVector(int n){
if(n<=0 ) { v =NULL; num=0; state = -1; cout << " Vec --> 0 "; }
num = n;
v = new ComplexDouble[n];
for(int i=0; i<n; i++) { v[i] = 0.0;
//v[i]._Val[_RE]=0.0; v[i]._Val[_IM]=0.0;
}
}
ComplexVector::ComplexVector(int n, ComplexDouble &b) {
if(n<=0 ) { v =NULL; num=0; state = -1; cout << " Vec --> 0 "; }
num = n;
v = new ComplexDouble[n];
for(int i=0; i<n; i++) { v[i] = b;
//v[i]._Val[_RE]=0.0; v[i]._Val[_IM]=0.0;
}
}

ComplexVector::ComplexVector(int n, ComplexDouble *p) {


if(n<=0 || p == NULL ) { v = NULL; num = 0; state = -1; cout << " Vec --> 0 "; }
num = n;
v = new ComplexDouble[n];
for(int i=0; i<n; i++) { v[i] = p[i];
}
}

ComplexVector::ComplexVector(const ComplexVector& s) {

num = s.num;
v = new ComplexDouble[num];
state = 0;
for(int i=0; i<num; i++) v[i] = s.v[i];
}

ComplexVector& ComplexVector::operator=(const ComplexVector& s){

if(num!=s.num)
{
if(v) delete[] v;
num = s.num;
v = new ComplexDouble[num];
state = 0;
}
for(int i=0; i<num; i++) v[i] = s.v[i];
return *this;
}
void ComplexVector::Input(){
9
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

if(num==0) {
if(v) delete[] v;
do {
cout<<"Input size Vec\n";
cin>>num;
} while (num<=0);
v = new ComplexDouble[num];
}
for(int i=0; i<num; i++) {
cout<<" v [ "<<i <<" ] real img "; cin>>v[i]>>v[i]._Val[_IM];
}
}

void ComplexVector::Output(){
if(num!=0) {
for(int i=0; i<num; i++) {
cout<<" v [ "<<i <<" ] " <<v[i] << '\t';
cout<<endl;
}
}
}

ComplexVector ComplexVector::Add(ComplexVector &b){


int tnum;
tnum = num<b.num? num: b.num;
if(tnum>=0) {
ComplexVector tmp(tnum);
for(int i=0; i<tnum; i++) tmp.v[i] = v[i] + b.v[i];
return tmp;
}
return ComplexVector(0);
}
int _tmain(int argc, _TCHAR* argv[])
{
ComplexDouble a(1.0,2),b,c;
cout << a << endl;
b._Val[_RE] = 21.3;
b._Val[_IM] = 22.3;
cout <<b<<endl;
c = a+b;
cout <<c<<endl;
cout <<" Test "<<endl;
ComplexVector VecObj, VecObj1(10);
cout<< "VecObj \n";
VecObj.Output();
cout<< "VecObj1 \n";
VecObj1.Output();
cout <<" Input a "<<endl;
cin>>a>>a._Val[_IM];
cout <<a<<endl;
ComplexVector VecObj2(10,a);
VecObj2.Output();

VecObj.Input();
cout<<endl;
VecObj.Output();
VecObj1 = VecObj.Add(VecObj2);
VecObj1.Output();

return 0;
}

10
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Завдання до лабораторної роботи:


Склонувати репозиторій https://classroom.github.com/a/RPalok-a.
Розробити та реалізувати класи згідно варіантів. Передбачити введення початкових даних:
з клавіатури, файлу та використовуючи датчик випадкових чисел. Написати тестові програми для
кожної задачі.
Варіант Завдання 1 Завдання 2 Завдання 3
1 Задача 1.1 Задача 2.1 Задача 3.1
2 Задача 1.2 Задача 2.2 Задача 3.2
3 Задача 1.3 Задача 2.3 Задача 3.3
4 Задача 1.4 Задача 2.4 Задача 3.4
5 Задача 1.5 Задача 2.5 Задача 3.5
6 Задача 1.6 Задача 2.6 Задача 3.6
7 Задача 1.7 Задача 2.7 Задача 3.7
8 Задача 1.8 Задача 2.8 Задача 3.8
9 Задача 1.9 Задача 2.9 Задача 3.9
10 Задача 1.10 Задача 2.10 Задача 3.10
11 Задача 1.1 Задача 2.6 Задача 3.8
12 Задача 1.2 Задача 2.7 Задача 3.9
13 Задача 1.3 Задача 2.8 Задача 3.10
14 Задача 1.4 Задача 2.9 Задача 3.1
15 Задача 1.5 Задача 2.10 Задача 3.2
16 Задача 1.6 Задача 2.1 Задача 3.3
17 Задача 1.7 Задача 2.2 Задача 3.4
18 Задача 1.8 Задача 2.3 Задача 3.5
19 Задача 1.9 Задача 2.4 Задача 3.6
20 Задача 1.10 Задача 2.5 Задача 3.7
21 Задача 1.1 Задача 2.6 Задача 3.8
22 Задача 1.2 Задача 2.7 Задача 3.9
23 Задача 1.3 Задача 2.8 Задача 3.10
24 Задача 1.4 Задача 2.9 Задача 3.1
25 Задача 1.5 Задача 2.10 Задача 3.2
26 Задача 1.6 Задача 2.1 Задача 3.3
27 Задача 1.7 Задача 2.2 Задача 3.4
28 Задача 1.8 Задача 2.3 Задача 3.5
29 Задача 1.9 Задача 2.4 Задача 3.6
30 Задача 1.10 Задача 2.5 Задача 3.7

Група задач 1.
Задача 1.1.
Створити клас типу - дата з полями: день (1-31), місяць (1-12), рік (ціле число). У класі
визначити
o конструктори ( не менше двох);
o функції-члени встановлення дня, місяця та року, функції встановлення полів
класу повинні перевіряти коректність параметрів, що задаються;
11
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o функції-члени одержання дня, місяця та року;


o дві функції-члени друку за шаблоном: “5 січня 2019 року” і “05.01.2019”.
Написати програму тестування всіх можливостей цього класу.
Задача 1.2.
Створити клас типу - час із полями: година (0-23), хвилини (0-59), секунди (0-59). У класі
визначити
o конструктори ( не менше двох);
o функції-члени встановлення години, хвилини та секунди, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени одержання години, хвилини та секунди;
o дві функції-члени друку за шаблоном: “16 годин 18 хвилин 3 секунди ” і “4 p.m.
18 хвилин 3 секунди ”
Написати програму тестування всіх можливостей цього класу.
Задача 1.3.
Створити клас типу – прямокутник ( поля : висота, ширина, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру;
o функції-члени встановлення висоти, ширини, кольору, функції встановлення полів
класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.
Задача 1.4.
Створити клас типу – паралелограм ( поля : основа, висота, бічна сторона, колір). У класі
визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру;
o функції-члени встановлення основи, висоти, бічної сторони, кольору, функції
встановлення полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Задача 1.5.
Створити клас типу – трикутник ( поля : сторони, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру;
o функції-члени встановлення значень сторін та кольору, функції встановлення полів
класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Задача 1.6.
Створити клас типу – ромб ( поля : сторона, діагональ, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру;
o функції-члени встановлення значення сторони, діагоналі та кольору, функції
встановлення полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.

12
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Написати програму тестування всіх можливостей цього класу.

Задача 1.7.
Створити клас типу гра в хрестики-нулики (поля: класу - масив з (3х3), стан, активний
гравець). У класі визначити
o конструктор;
o функції-члени перевірки кінця гри, виведення повідомлень по стан
гри, початку гри, ходів граків, тощо;
Написати програму тестування всіх можливостей цього класу.
Задача 1.7. (альтернатива)
Створити клас типу – Правильний тетраедр ( поля : сторона колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру,об’єму;
o функції-члени встановлення значення сторони, діагоналі та кольору, функції
встановлення полів класу повинні перевіряти коректність параметрів, що задаються;

o функції-члени що повертають значення полів;


o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Задача 1.8.
Створити клас типу – круг ( поля : радіус, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі круга, довжини кола;
o функції-члени встановлення значення радіусу та кольору, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Задача 1.9.
Створити клас типу – квадрат ( поля : сторона, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру, описаного та вписаного кола;
o функції-члени встановлення значення сторони та кольору, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Задача 1.10.
Створити клас типу – куб ( поля : сторона, колір). У класі визначити
o конструктори ( не менше двох);

13
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o функції-члени обчислення площі поверхні, об’єму, довжини діагоналі та об’єм


вписаної сфери;
o функції-члени встановлення значення сторони та кольору, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.

Група задач 2
Задача 2.1. Створити тип даних - клас вектор, який має вказівник на int, число елементів і
змінну стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу).
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять.
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;
o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні
операції з даними цього класу, множення на ціле типу short;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 2.2.
Створити тип даних - клас вектор, який має вказівник на float, число елементів і змінну
стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу).
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;
o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні
операції з даними цього класу, множення на ціле типу long;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.

14
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 2.3.
Створити тип даних - клас вектор, який має вказівник на double, число елементів і змінну
стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;
o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні
операції з даними цього класу, множення та ділення на скаляр типу double;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 2.4.
Створити тип даних - клас вектор, який має вказівник на short, число елементів і змінну
стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;
o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні
операції з даними цього класу, множення на ціле типу unsigned char;
o визначити функції порівняння: більше, нерівно або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Перевірити роботу цього класу.
Задача 2.5.
Створити тип даних - клас вектор, який має вказівник на long, число елементів і змінну
стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);

15
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує


масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;
o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні
операції з даними цього класу, множення на ціле типу unsigned int;
o визначити функції порівняння: менше, нерівно або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 2.6.
Створити тип даних - клас вектор, який має поля x, y та z типу float і змінну стану. У класі
визначити
o конструктор без параметрів(інінціалізує поля в нуль);
o конструктор з одним параметром типу float (інінціалізує поля x, y та z значенням
параметру);
o конструктор з одним параметром вказівник на тип (інінціалізує поля x, y та z
значенням масиву за вказівником, якщо вказівник NULL (nulptr) то встановити
код помилки);
o деструктор із виведенням інформації про стан вектора;
o визначити функцію, яка присвоює полю x, y або z деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент з полів x, y та z;
o конструктор копій та операцію присвоєння; // !!!
o визначити функції друку, додавання, віднімання, векторний добуток які
здійснюють ці арифметичні операції з даними цього класу;
o функцію ділення на ціле типу short(при діленні на 0 змінити стан, а ділення не
виконувати);
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, діленні на 0, при передачі NULL (nulptr) в
конструкторі із вказівником. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.
Задача 2.7.
Створити тип даних - клас вектор, який має масив з трьох елементів типу double і змінну
стану. У класі визначити
o конструктор без параметрів(інінціалізує поля в нуль);
o конструктор з одним параметром типу double (інінціалізує масив значенням
параметру);
o конструктор з одним параметром вказівник на тип (інінціалізує масив класу
значенням елементів масиву, який передається параметр за вказівником, якщо
вказівник NULL (nulptr) то встановити код помилки);
o деструктор із виведенням інформації про стан вектора;

16
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o визначити функцію, яка присвоює масиву деяке значення (параметр за


замовчуванням);
o функцію яка одержує деякий елемент з масиву;
o визначити функції друку, додавання, віднімання та векторного добутку які
здійснюють ці арифметичні операції з даними цього класу;
o функцію ділення на ціле типу short(при діленні на 0 змінити стан, а ділення не
виконувати);
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, діленні на 0, при передачі NULL (nulptr) в
конструкторі із вказівником. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.
Задача 2.8.
Створити тип даних - клас комплексне число, який має поля re та im типу float і поле
змінну стану. У класі визначити
o конструктор без параметрів(інінціалізує поля в нуль);
o конструктор з одним параметром типу float (інінціалізує поля re та im значенням
параметру);
o конструктор з одним параметром вказівник на тип (інінціалізує поля re та im
значенням масиву за вказівником, якщо вказівник NULL (nulptr) то встановити
код помилки);
o деструктор із виведенням інформації про стан вектора;
o визначити функцію, яка присвоює полю re та im деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент з полів re та im;
o конструктор копій та операцію присвоєння; // !!!
o визначити функції друку, додавання, віднімання, множення та ділення які
здійснюють ці арифметичні операції з даними цього класу;
o функцію ділення на ціле типу short(при діленні на 0 змінити стан, а ділення не
виконувати);
o норми комплексного числа;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, діленні на 0, при передачі NULL (nulptr) в
конструкторі із вказівником. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.
Задача 2.9.
Створити тип даних - клас вектор, який має вказівник на unsigned int, число елементів і
змінну стану. У класі визначити
o конструктор без параметрів( виділяє місце для одного елемента та інінціалізує
його в нуль);
o конструктор з одним параметром - розмір вектора( виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами - розмір вектора та значення
ініціалізації(виділяє місце (значення перший аргумент) та інінціалізує значенням
другого аргументу);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент масиву;

17
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o визначити функції друку, додавання, віднімання, які здійснюють ці арифметичні


операції з даними цього класу, множення на ціле типу unsigned short;
o визначити функції порівняння: більше, менше, нерівно або рівно, які повертають
true або false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масиву,
ініціалізація від’ємним числом. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.
Задача 2.10.
Створити тип даних - клас множина з повторенням діапазону цілих чисел. У класі
визначити вказівник на unsigned int(для збереження множини), числа beg (початок) та
end(кінець) діапазону типу unsigned int (beg<end) і змінну стану. У множині створюється масив
розміром size = end - beg , який кількість повторень елемента множини. У класі визначити
o конструктор без параметрів(виділяє місце для множини чисел beg = 0 до end
=100 та інінціалізує його в нуль);
o конструктор з одним параметром - end (beg = 0, виділяє місце та інінціалізує
масив значенням нуль);
o конструктор із двома параметрами beg та end (виділяє місце та інінціалізує масив
значенням нуль);
o конструктор із трьома параметрами beg, end та value(виділяє місце та
інінціалізує масив значенням value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу множини деяке значення value
(параметр за замовчуванням);
o функцію яка одержує кількість повторення елементу множини;
o визначити функції друку, об’єднання, перетину та різниці, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функції порівняння: більше, менше, нерівно або рівно, які повертають
true або false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі множини,
ініціалізація числом, яке є за межами діапазону множини. Передбачити можливість підрахунку
числа об'єктів даного типу. Написати програму тестування всіх можливостей цього класу.

Група задач 3
Задача 3.1. Створити клас матриця. Даний клас містить вказівник на int, розміри рядків і стовпців
та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 3 на 3 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром – розмір n матриці (виділяє місце n на n та
інінціалізує матрицю значенням нуль);
o конструктор із трьома розміри матриці (n , m) та значення ініціалізації value
(виділяє місце перші аргументи та інінціалізує значенням третього аргументу -
value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять.
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;

18
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 3.2.
Створити клас матриця. Даний клас містить вказівник на float, розміри рядків і стовпців
та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 2 на 2 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром - розмір n матриці (виділяє місце для матриці n
на n та інінціалізує матрицю значенням нуль);
o конструктор із трьома розміри матриці (n , m) та значення ініціалізації value
(виділяє місце перші аргументи та інінціалізує значенням третього аргументу -
value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять.
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення на скаляр, віднімання, які
здійснюють ці арифметичні операції з даними цього класу;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.

У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 3.3.
Створити клас матриця. Даний клас містить вказівник на double, розміри рядків і стовпців
та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 4 на 3 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром - розмір n матриці (виділяє місце для матриці n
на n та інінціалізує матрицю значенням нуль);
o конструктор із трьома розміри матриці (n , m) та значення ініціалізації value
(виділяє місце перші аргументи та інінціалізує значенням третього аргументу -
value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення на скаляр типу double,
віднімання, які здійснюють ці арифметичні операції з даними цього класу;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 3.4.

19
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Створити клас матриця. Даний клас містить вказівник на short, розмір рядків і стовпців та
стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 4 на 4 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром – розмір n матриці (виділяє місце n на n та
інінціалізує матрицю значенням нуль);
o конструктор із трьома параметрами - розміри матриці (n , m) та значення
ініціалізації value (виділяє місце перші аргументи та інінціалізує значенням
третього аргументу - value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення value
(параметр за замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію множення матриці на скаляр типу short;
o визначити функції порівняння: більше, менше або нерівно, які повертають true
або false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 3.5.
Створити клас матриця. Даний клас містить вказівник на вказівник на int, розміри рядків і
стовпців та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 3 на 3 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром – розмір n матриці (виділяє місце n на n та
інінціалізує матрицю значенням нуль);
o конструктор із трьома параметрами розміри матриці (n , m) та значення
ініціалізації value (виділяє місце перші аргументи та інінціалізує значенням
третього аргументу - value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію множення матриці на скаляр типу short;
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці.
Передбачити можливість підрахунку числа об'єктів даного типу. Написати програму тестування
всіх можливостей цього класу.
Задача 3.6.
Створити клас матриця. Даний клас містить вказівник на вказівник на double, розміри
рядків і стовпців та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 2 на 2 елемента та
інінціалізує його в нуль);

20
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o конструктор з одним параметром – розмір n матриці (виділяє місце n на n та


інінціалізує матрицю значенням нуль);
o конструктор із трьома параметрами розміри матриці (n , m) та значення
ініціалізації value (виділяє місце перші аргументи та інінціалізує значенням
третього аргументу - value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію ділення матриці на скаляр типу int (у випадку якщо скаляр
рівний нулю ділення не виконувати);
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці,
ділення на 0. Передбачити можливість підрахунку числа об'єктів даного типу. Написати
програму тестування всіх можливостей цього класу.
Задача 3.7.
Створити клас матриця. Даний клас містить вказівник на вказівник на long, розміри рядків
і стовпців та стан помилки. У класі визначити
o конструктор без параметрів( виділяє місце для матриці 5 на 5 елемента та
інінціалізує його в нуль);
o конструктор з одним параметром – розмір n матриці (виділяє місце n на n та
інінціалізує матрицю значенням нуль);
o конструктор із трьома параметрами розміри матриці (n , m) та значення
ініціалізації value (виділяє місце перші аргументи та інінціалізує значенням
третього аргументу - value);
o конструктор копій та операцію присвоєння; // !!!
o деструктор звільняє пам'ять;
o визначити функцію, яка присвоює елементу масиву деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію ділення матриці на скаляр типу long (у випадку якщо скаляр
рівний нулю ділення не виконувати);
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі матриці,
ділення на 0. Передбачити можливість підрахунку числа об'єктів даного типу. Написати
програму тестування всіх можливостей цього класу.
Задача 3.8.
Створити два класи вектор та матриця. Даний клас вектор містить вказівник на long та
розмір вектора, клас матриця містить вказівник на створений клас вектор, кількість векторів та
стан помилки. У класах визначити
o конструктори без параметрів(для вектора виділяє місце для 5 елементів, для
матриці виділяє місце для 5 векторів та інінціалізує елементи в нуль);

21
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

o конструктори з одним параметром – розмір n матриці (для вектора виділяє місце


для n елементів, для матриці виділяє місце для n векторів та інінціалізує елементи
в нуль);
o конструктор із трьома параметрами розміри матриці (n , m) та значення
ініціалізації value (для вектора виділяє місце для n елементів, для матриці виділяє
місце для m векторів та інінціалізує елементи значенням третього аргументу -
value);
o конструктор копій та операцію присвоєння; // !!!
o деструктори звільняють пам'ять;
У класі матриці визначити
o визначити функцію, яка присвоює елементу матриці деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію ділення матриці на скаляр типу long (у випадку якщо скаляр
рівний нулю ділення не виконувати);
o визначити функції порівняння: більше, менше або рівно, які повертають true або
false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масивів,
ділення на 0. Передбачити можливість підрахунку числа об'єктів даного типу. Написати
програму тестування всіх можливостей цього класу.
Задача 3.9.
Створити два класи вектор та матриця. Даний клас вектор містить вказівник на double та
розмір вектора, клас матриця містить вказівник на створений клас вектор, кількість векторів та
стан помилки. У класах визначити
o конструктори без параметрів(для вектора виділяє місце для 5 елементів, для
матриці виділяє місце для 5 векторів та інінціалізує елементи в нуль);
o конструктори з одним параметром – розмір n матриці (для вектора виділяє місце
для n елементів, для матриці виділяє місце для n векторів та інінціалізує елементи
в нуль);
o конструктор із трьома параметрами розміри матриці (n , m) та значення
ініціалізації value (для вектора виділяє місце для n елементів, для матриці виділяє
місце для m векторів та інінціалізує елементи значенням третього аргументу -
value);
o конструктор копій та операцію присвоєння; // !!!
o деструктори звільняють пам'ять.
У класі матриці визначити
o визначити функцію, яка присвоює елементу матриці деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, додавання, множення, віднімання, які здійснюють ці
арифметичні операції з даними цього класу;
o визначити функцію ділення матриці на скаляр типу int (у випадку якщо скаляр
рівний нулю ділення не виконувати);
o визначити функції порівняння: більше, менше або нерівно, які повертають true
або false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масивів,
ділення на 0. Передбачити можливість підрахунку числа об'єктів даного типу. Написати
програму тестування всіх можливостей цього класу.

22
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.

Задача 3.10.
Створити два класи вектор та матриця. Даний клас вектор містить вказівник на char та
розмір вектора, клас матриця містить вказівник на створений клас вектор, кількість векторів та
стан помилки. У класах визначити
o конструктори без параметрів(для вектора виділяє місце для 5 елементів, для
матриці виділяє місце для 5 векторів та інінціалізує елементи в ‘_’ - символ
пробіл);
o конструктори з одним параметром – розмір n матриці (для вектора виділяє місце
для n елементів, для матриці виділяє місце для n векторів та інінціалізує елементи
в ‘_’ - символ пробіл);
o конструктор із трьома параметрами розміри матриці - n і m типу unsigned int та
значення ініціалізації value типу char(для вектора виділяє місце для n елементів,
для матриці виділяє місце для m векторів та інінціалізує елементи значенням
третього аргументу - value);
o конструктор копій та операцію присвоєння; // !!!
o деструктори звільняють пам'ять.
У класі матриці визначити
o визначити функцію, яка присвоює елементу матриці деяке значення (параметр за
замовчуванням);
o функцію яка одержує деякий елемент матриці за індексами i та j;
o визначити функції друку, кодування та декодування, які здійснюють ці по-бітові
операції з даними цього класу;
o визначити функцію кодування матриці за скалярною маскою типу unsigned char
(у випадку якщо скаляр рівний нулю кодування не виконувати);
o визначити функції порівняння: більше, менше або нерівно, які повертають true
або false.
У змінну стани встановлювати код помилки, коли не вистачає пам'яті, виходить за межі масивів,
при кодуванні з маскою 0. Передбачити можливість підрахунку числа об'єктів даного типу.
Написати програму тестування всіх можливостей цього класу.

23

You might also like