Professional Documents
Culture Documents
OopLab 3 2023 24
OopLab 3 2023 24
Методичні вказівки
1. Основи об’єктно-орієнтованого програмування мовою С++
2. Класи. Протокол класу.
3. Дані та функції класів.
4. Конструктори та деструктори.
1
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
2
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
Елементи даних класів можуть мати будь-якого типу, крім типу цього ж класу (але можуть
бути вказівник або посилання на цей клас). Ініціалізація полів при описі класу не допускається.
Класи можуть бути глобальними (оголошеними поза будь-яким блоком) і локальними
(оголошеними усередині блоку, наприклад, функції або іншого класу).
У класі крім звичайний методів(функцій) класу є деякі спеціальні функції, такі, як
конструктори, деструктори, функції перетворення, операції.
Конструктор - функція з тим же ім'ям, що й сам клас без типу. В класі може бути декілька
конструкторів. Деструктор - функція, ім'ям якої є ім'я класу із префікс-тильдою (~) без типів і
без параметрів.
Кожен представник класу називається об'єктом.
#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
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
};
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()<<" ";
#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) {
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;
Приклад 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(const ComplexVector& s) {
num = s.num;
v = new ComplexDouble[num];
state = 0;
for(int i=0; i<num; i++) v[i] = s.v[i];
}
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;
}
}
}
VecObj.Input();
cout<<endl;
VecObj.Output();
VecObj1 = VecObj.Add(VecObj2);
VecObj1.Output();
return 0;
}
10
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
Група задач 1.
Задача 1.1.
Створити клас типу - дата з полями: день (1-31), місяць (1-12), рік (ціле число). У класі
визначити
o конструктори ( не менше двох);
o функції-члени встановлення дня, місяця та року, функції встановлення полів
класу повинні перевіряти коректність параметрів, що задаються;
11
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
Задача 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 функції-члени встановлення значення сторони, діагоналі та кольору, функції
встановлення полів класу повинні перевіряти коректність параметрів, що задаються;
Задача 1.8.
Створити клас типу – круг ( поля : радіус, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі круга, довжини кола;
o функції-члени встановлення значення радіусу та кольору, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.
Задача 1.9.
Створити клас типу – квадрат ( поля : сторона, колір). У класі визначити
o конструктори ( не менше двох);
o функції-члени обчислення площі, периметру, описаного та вписаного кола;
o функції-члени встановлення значення сторони та кольору, функції встановлення
полів класу повинні перевіряти коректність параметрів, що задаються;
o функції-члени що повертають значення полів;
o функцію друку.
Написати програму тестування всіх можливостей цього класу.
Задача 1.10.
Створити клас типу – куб ( поля : сторона, колір). У класі визначити
o конструктори ( не менше двох);
13
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
Група задач 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
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
16
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
17
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
Група задач 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
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
21
Об’єктно – орієнтоване програмування мовою С++ Лазорик В.В.
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