Professional Documents
Culture Documents
Lab 2 Prog Done
Lab 2 Prog Done
Вико
нав студент групи ІР-22
Музика Марк Сергійович
Викладач : к.ф.-м.н., ас. Пономарнеко Роман
Миколайович
Київ – 2021
ЗМІСТ
1. Постановка завдання 3
2. Аналітичні викладки 4
3. UML діаграма класу 5
4. Код програми 6
5. Тестування програми 11
6. Висновок 11
Лабораторна робота №2
Тема: Спадкування С++.
Мета: вивчити основні концепції об'єктно-орієнтованого програмування.
Вивчити особливості успадкування і множинного спадкування.
Етапи виконання завдання:
Розробити покроковий алгоритм вирішення розрахункової частини завдання
і підзадач (при необхідності). Розробити UML діаграму класів. Виконати
програмну реалізацію завдання відповідно до варіанту. Прототипи класів
повинні містяться в окремому * .h- файлі. У програмі обов'язково передбачити
висновок інформації про виконавця роботи (ПІБ), номер варіанта, обраному
рівні складності і завданні. Передбачити можливість повторного запуску
програми (запит про бажання вийти з програми, або продовжити роботу).
Ключові моменти програми обов'язково повинні містити коментарі.
Завдання 1
Аналітичні викладки:
Спадкування -це здатність брати існуючий (базовий) клас і породжувати з
нього новий клас – нащадок, з успадкуванням всіх його атрибутів і поведінки.
Похідний клас може успадковуватися від базового класу як public,
protected або private. Захищене і закрите наслідування зустрічаються рідко і
кожне з них потрібно використовувати з великою обережністю. При
наслідуванні класу як public, всі відкриті елементи базового класу стають
відкритими елементами похідного класу, а захищені елементи базового
захищеними елементами похідного. Закриті елементи базового класу ніколи
недоступні похідному класу, навіть при наслідуванні специфікатором public.
При захищеному спадкуванні відкриті і захищені елементи базового класу
стають захищеними елементами похідного класу. При закритому
спадкуванні відкриті і захищені елементи базового класу стають закритими
елементами похідного класу. При закритому і захищеному спадкуванні не
справедливо відношення, що об'єкт похідного класу є об'єктом базового класу.
Якщо не вказано специфікацію наслідування, то наслідування є закритим. Якщо
в класі-спадкоємця перевизначити функцію-елемент (ввести нову функцію
з тим же ім'ям), то для об'єктів цього класу нова функція скасує
батьківську. Якщо ж звертатися до об'єкта цього класу, то викликатися буде
нова функція. Якщо треба викликати саме функцію базового класу, то
необхідно використовувати операцію дозволу області дії (позначається як
class_name::).
Площа круга – S = πr2, де π = 3,14, r – радіус круга.
Площа поверхні тора S та його об'єм V визначаються за формулами:
Sтора=4π2Rr
Vтора=2π2Rr2
UML діаграма класів:
Код програми:
Lab2.cpp:
#include "pch.h"
#include "Point.h"
#include "SubClasses.h"
#include <iostream>
#include <string>
#include <ctime>
int main()
{
setlocale(0, "rus");
char p = 'y';
char flag;
int temp_x, temp_y;
double temp_R, temp_r;
while (p == 'y')
{
cout << "Введiть координати та радiус кола №1 через Enter: ";
cin >> temp_x;
cin >> temp_y;
cin >> temp_R;
flag = 'y';
cout << "Бажаєте використати вже введенi радiуси для тора чи ввести новi, якщо
так то введiть y, якщо нi то n: ";
cin >> flag;
if (flag == 'n')
{
cout << "Введiть радiус кола оберту утворюючого коло тора: ";
cin >> temp_R;
cout << "Введiть радiус утворюючого коло тора: ";
cin >> temp_r;
}
return 0;
}
Point.h:
#pragma once
#include <string>
class Point
{
protected:
int x;
int y;
public:
Point(void);
Point(int X, int Y);
Point(const Point& obj);
Point.cpp:
#include "pch.h"
#include "Point.h"
#include <iostream>
Point::Point(void)
{
x = 0;
y = 0;
}
SubClasses.h:
#pragma once
#include"Point.h"
protected:
const double PI = 3.141592653589793238463;
double R; //для тора радіус кола оберту утворюючого коло тора
double Square;
public:
CircleA(void);
CircleA(int X, int Y, double R);
CircleA(const CircleA& obj);
protected:
const double PI = 3.141592653589793238463;
double r; //для тора радіус утворюючого коло тора
double Square;
public:
CircleB(void);
CircleB(int X, int Y, double r);
CircleB(const CircleB& obj);
protected:
double Volume;
public:
Torus(void);
Torus(int X, int Y, double R, double r);
Torus(const Torus& obj);
SubClasses.cpp:
#include "pch.h"
#include "SubClasses.h"
#include <iostream>
CircleA::CircleA(void)
{
x = 0;
y = 0;
R = 0;
Square = 0;
}
CircleB::CircleB(void)
{
x = 0;
y = 0;
r = 0;
Square = 0;
}
Torus::Torus(void)
{
CircleA::x = 0;
CircleA::y = 0;
R = 0;
r = 0;
CircleA::Square = 0;
Volume = 0;
}
void CircleA::calculateSquare(void)
{
Square = R * R * PI;
}
void CircleB::calculateSquare(void)
{
Square = r * r * PI;
}
void Torus::calculateSquare(void)
{
CircleA::Square = 4 * CircleA::PI * CircleA::PI * R * r;
}
void Torus::calculateVolume(void)
{
Volume = 2 * CircleA::PI * CircleA::PI * R * r * r;
}
Тестування програми: