Добавил:
інстаграм _roman.kob, курсові роботи з тєрєхова в.в. для КІ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lr2-oop2020

.doc
Скачиваний:
2
Добавлен:
31.05.2020
Размер:
52.74 Кб
Скачать

Лабораторна робота № 2

Тема роботи: Робота з динамічною памяттю

Мета роботи: ознайомитись з можливостями мови C++ для роботи з динамічною пам’ятю та навчитись використовувати їх при роботі з класами та об’єктами.

Завдання. Для класу, створеного у лабораторній роботі № 1, реалізувати можливість зберігання даних у динамічній пам’яті та роботи з ними.

Послідовність роботи:

1. Ознайомитись з особливостями виділення та звільнення динамічної пам’яті на С++, операціями new та delete .

2. Модифікувати текст програми з ЛР № 1, описати поля даних класу як змінні у динамічній пам’яті.

3. Внести відповідні зміни у конструктори, деструктор, методи доступу та інші функції класу.

4. Реалізувати конструктор копіювання – для створення глибокої копії об’єкта, розглянути на прикладі конструктора копіювання параметри-посилання та константні параметри.

5. Продемонструвати використання вказівника this для доступу до полів та методів класу.

6. Створити об’єкти розробленого класу в динамічній пам’яті.

7. Вивести на екран повідомлення про виконання конструкторів та деструкторів.

8. Визначити, які можливості виділення пам’яті для великих об’ємів даних у масивах-полях класу надає використання динамічної пам’яті.

9. Оформити звіт про роботу за такою структурою:

  • назва роботи;

  • мета роботи;

  • послідовність роботи;

  • індивідуальне завдання;

  • текст програми;

  • контрольний приклад та результати роботи програми;

  • висновки.

Приклад програми

Створити клас Point3D (точка у тривимірному просторі), який містить цілочислові поля: х, у, z (координати точки) – у закритій частині. Поля даних описати як змінні у динамічній пам’яті. У відкритій частині класу визначити конструктор без параметрів, конструктор з трьома параметрами, конструктор копіювання, деструктор, функції GetX, GetY, GetZ для отримання та функції SetX, SetY, SetZ для зміни значень відповідних полів даних, функцію Print для виведення усіх полів даних, функцію Distance для обчислення відстані між двома точками. Оголосити 3 різних об’єкти класу Point3D, один з яких – у динамічній пам’яті, продемонструвати роботу розроблених функцій.

#include <iostream>

#include <cmath>

using namespace std;

class Point3D

{

private:

int *x;

int *y;

int *z;

public:

Point3D()

{x = new int(0); y = new int(0), z = new int(0);}

Point3D(int x, int y, int z)

{this->x = new int(x); this->y = new int(y); this->z = new int(z);}

Point3D(const Point3D &obj)

{x = new int(*obj.x); y = new int(*obj.y); z = new int(*obj.z);}

~Point3D() {delete z; delete y; delete x;}

int GetX() {return *x;}

int GetY() {return *y;}

int GetZ() {return *z;}

void SetX(int a) {*x = a;}

void SetY(int b) {*y = b;}

void SetZ(int c) {*z = c;}

void Print(void);

double Distance(Point3D &obj);

};

void Point3D::Print(void)

{

cout << *x << ' ' << *y << ' ' << *z << endl;

}

double Point3D::Distance(Point3D &obj)

{

return sqrt( pow((double)*x - obj.GetX(), 2) +

pow((double)*y - obj.GetY(), 2) +

pow((double)*z - obj.GetZ(), 2) );

}

int main()

{

Point3D obj1(1, 2, 3);

Point3D *obj2 = new Point3D;

Point3D obj3(obj1);

cout << obj1.GetX() << ' ';

cout << obj1.GetY() << ' ';

cout << obj1.GetZ() << endl;

obj2->Print();

obj3.Print();

cout << obj1.Distance(*obj2) << endl;

obj1.SetX(6);

obj1.SetY(5);

obj1.SetZ(4);

obj1.Print();

obj3.Print();

cout << obj1.Distance(obj3) << endl;

return 0;

}

Соседние файлы в предмете Объектно ориентированное программирование