Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика ООП.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
1.36 Mб
Скачать

Тема: оголошення та структура класів.

Мета: полягає у вивченні оголошення класу та рівні захисту його елементів.

Матеріально-технічне оснащення робочого місця: ПК, інструкційна картка.

Зміст та послідовність виконання завдань

1. Створити клас - ДАТА з полями у закритій частині: день (1-31), місяць (1-12), рік (ціле число). Клас має конструктор, методи встановлення дня, місяця і року, методи читання дня, місяця і року. У методах встановлення полів класу необхідно перевіряти коректність заданих параметрів. Визначити метод, який збільшує значення дати на 1 день.

Програма:

#pragma once

#define cls system("cls")

class CDate

{

public:

//konstruktor

CDate();

//setters---------------------------------------

void SetDay(const int _day) { day = _day; }

void SetMonth(const int _month) { month = _month; }

void SetYear(const int _year) { year = _year; }

//Getters-----------------------------------------

int GetDay() const { return day; }

int GetMonth() const { return month; }

int GetYear() const { return year; }

//inits--------------------------------------------

void InitDay();

void InitMonth();

void InitData();

//Increment day------------------------------------

void DateIncrement();

void Print() const; //Print data

private:

int day;

int month;

int year;

};

CDate::CDate()

{

InitData();

}

void CDate::InitDay()

{

int d;

std::cout << "Enter Day: ";

std::cin >> d;

if (d < 32 && d > 0)

SetDay(d);

else

{

cls;

InitDay();

}

}

void CDate::InitMonth()

{

int m;

std::cout << "Enter Month: ";

std::cin >> m;

if (m > 0 && m < 13)

SetMonth(m);

else

{

cls;

InitMonth();

}

}

void CDate::InitData()

{

int y;

InitDay();

InitMonth();

std::cout << "Enter Year: ";

std::cin >> y;

SetYear(y);

}

void CDate::DateIncrement()

{

this->day++;

}

void CDate::Print() const

{

std::cout << "\n\tDate: \n"

<< "Day = " << day << "\n\nMonth = " << month

<< "\n\nYear = " << year << std::endl;

}

Результат:

2. Створити клас для виконання арифметичних операцій над ЦІЛИМИ ЧИСЛАМИ у шістнадцятковій системі числення. Числа задаються у вигляді рядка символів в області динамічної пам’яті. Визначити конструктори, деструктор, методи виконання операцій, введення чисел та виведення результату.

Програма:

#pragma once

class CintHex

{public:

CintHex();

CintHex(const char* str);

~CintHex();

void SetValue(const char* str);

const char *GetValue() const { return value; }

void SumBin(const CintHex &_value);

void SubBin(const CintHex &_value);

void MulBin(const CintHex &_value);

void DivBin(const CintHex &_value);

private:

char *value;

int StrToDes(const char* bin_str); };

Результат:

Тема: агрегування та композиція класів.

Мета: поляга у вивченні механізму повторного використання коду на основі контейнерних класів.

Матеріально-технічне оснащення робочого місця: ПК, інструкційна картка.

Зміст та послідовність виконання завдань

1. Розробити клас УНІВЕРСИТЕТ, який містить прізвище ректора та масив об’єктів класу ІНСТИТУТ. Об’єкт класу ІНСТИТУТ містить прізвище директора та масив об’єктів класу КАФЕДРА. Клас КАФЕРА містить прізвище завідувача кафедри та кількість співробітників. Визначити необхідні конструктори, деструктори та методи роботи з елементами даних. Обчислити загальну кількість співробітників університету.

Програма:

#pragma once

#include "CInstityt.h"

class Cuniversity

{

public:

Cuniversity();

~Cuniversity();

void SetRector(const char* name);

void SetInstityte(const int count);

const char *GetRector() const { return rector; }

void PrintUniversity() const;

private:

char* rector;

Cinstityte* instute;

int instituteCount;

};

Cuniversity::Cuniversity()

{

rector = new char[9];

strcpy_s(rector, 8, "Unknovn");

instituteCount = 1;

instute = new Cinstityte[instituteCount];

}

Cuniversity::~Cuniversity()

{

if (rector)

delete[] rector;

if (instute)

delete[] instute;

}

void Cuniversity::SetRector(const char* name)

{

if (rector)

delete[] this->rector;

this->rector = new char[strlen(name) + 1];

strcpy_s(rector, strlen(name) + 1, name);

}

void Cuniversity::PrintUniversity() const

{

system("cls");

std::cout << "\nRector Univrsity: " << rector;

for (int i = 0; i < instituteCount; i++)

instute[i].PrintInstitute();

}

void Cuniversity::SetInstityte(const int count)

{

char str[30];

if (instute)

delete[] instute;

instute = new Cinstityte[count];

instituteCount= count;

for (int i = 0; i < count; i++)

{

instute[i].SetDirector(str);

instute[i].SetKafedra(3);

}

}

Результат:

2. Клас ВЕНТИЛЯТОР містить об’єкти класу ДВИГУН, КОНТРОЛЕР,

ПУЛЬТ керування. Визначити необхідні дані, конструктори, деструктори та методи роботи з елементами даних. За допомогою ПУЛЬТА керування виставити необхідну швидкість обертів двигуна та час відключення ВЕНТИЛЯТОРА.

Програма:

#pragma once

#include "CPult.h"

class CVent

{

public:

CPult pult;

void Print()

}

class CPult

{

public:

CEngine engine;

CController controller;

void OnOff(){ engine.SetStatus(!engine.GetStatus()); }

void ChangeSPeed(){

short controllerTMP;

controller.Print();

std::cout << "Enter speed\n";

std::cin >> controllerTMP;

if (controllerTMP < 0 || controllerTMP > MAXIMUM_SPEED_LEVEL){

system("cls");

std::cout << "Invalid, choose from 1 to 100\n";

ChangeSPeed();

}

else

controller.SetSpeed(controllerTMP);

}

};

class CController

{

short speed;

public:

CController(){ speed = 0; }

void Print(){ std::cout << "Speed: " << speed << std::endl; }

short GetSpeed(){ return speed; }

void SetSpeed(short newSpeed){ speed = newSpeed; }

};

class CEngine

{

bool status;

public:

CEngine() {status = false;}

void Print(){

if (status == false)

std::cout << "VENT OFFLINE\n";

else if (status == true)

std::cout << "VENT ONLINE\n";

}

bool GetStatus(){return status;}

void SetStatus(bool newStatus){status = newStatus;}

};

{

if (pult.engine.GetStatus() == false)

std::cout << "OFFLINE\n";

else if (pult.engine.GetStatus() == true)

{

pult.engine.Print();

pult.controller.Print();

}

}

};

Результат: