From 8dd9b39fa54a91030cdd5fe71973f78f7e8089e0 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 10 May 2024 11:33:50 +0300 Subject: [w12] Solved exercises 1 and 3 --- week12/Exercise3/MobileDevice.cpp | 15 +++++++ week12/Exercise3/MobileDevice.h | 14 +++++++ week12/Exercise3/Pager.cpp | 59 +++++++++++++++++++++++++++ week12/Exercise3/Pager.h | 19 +++++++++ week12/Exercise3/TelecommunicationCompany.cpp | 47 +++++++++++++++++++++ week12/Exercise3/TelecommunicationCompany.h | 18 ++++++++ week12/Exercise3/Telephone.cpp | 6 +++ week12/Exercise3/Telephone.h | 6 +++ 8 files changed, 184 insertions(+) create mode 100644 week12/Exercise3/MobileDevice.cpp create mode 100644 week12/Exercise3/MobileDevice.h create mode 100644 week12/Exercise3/Pager.cpp create mode 100644 week12/Exercise3/Pager.h create mode 100644 week12/Exercise3/TelecommunicationCompany.cpp create mode 100644 week12/Exercise3/TelecommunicationCompany.h create mode 100644 week12/Exercise3/Telephone.cpp create mode 100644 week12/Exercise3/Telephone.h (limited to 'week12/Exercise3') diff --git a/week12/Exercise3/MobileDevice.cpp b/week12/Exercise3/MobileDevice.cpp new file mode 100644 index 0000000..9820658 --- /dev/null +++ b/week12/Exercise3/MobileDevice.cpp @@ -0,0 +1,15 @@ +#include "MobileDevice.h" +#include +#include + +bool MobileDevice::CanAccept(const char* hyperMessage) { + unsigned msgNumber = atoi(hyperMessage); + return msgNumber == phoneNumber; +} + +void MobileDevice::Accept(const char* hyperMessage) { + if (!CanAccept(hyperMessage)) { + throw "Can't accept message!"; + } + strncpy(textMessage, strchr(hyperMessage, ' ') + 1, 512); +} diff --git a/week12/Exercise3/MobileDevice.h b/week12/Exercise3/MobileDevice.h new file mode 100644 index 0000000..b9de538 --- /dev/null +++ b/week12/Exercise3/MobileDevice.h @@ -0,0 +1,14 @@ +#pragma once + +class MobileDevice { +protected: + unsigned phoneNumber; + char textMessage[512]; + +public: + virtual ~MobileDevice() = default; + + virtual void Show() = 0; + bool CanAccept(const char* hyperMessage); + void Accept(const char* hyperMessage); +}; diff --git a/week12/Exercise3/Pager.cpp b/week12/Exercise3/Pager.cpp new file mode 100644 index 0000000..18beb4b --- /dev/null +++ b/week12/Exercise3/Pager.cpp @@ -0,0 +1,59 @@ +#include "Pager.h" +#include +#include +#include + +void Pager::free() { + delete[] fileName; +} + +void Pager::copyFrom(const Pager& other) { + this->fileName = new char[strlen(other.fileName) + 1]; + strcpy(this->fileName, other.fileName); +} + +Pager::Pager() { + this->fileName = nullptr; +} + +Pager::~Pager() { + free(); +} + +Pager::Pager(const Pager& other) { + copyFrom(other); +} + +Pager& Pager::operator=(const Pager& other) { + if (this != &other) { + free(); + copyFrom(other); + } + return *this; +} + +Pager::Pager(Pager&& other) { + this->fileName = other.fileName; + other.fileName = nullptr; +} + +Pager& Pager::operator=(Pager&& other) { + if (this != &other) { + free(); + + this->fileName = other.fileName; + other.fileName = nullptr; + } + return *this; +} + +void Pager::Show() { + std::ofstream outFile(fileName); + if (!outFile.is_open()) { + throw "Coudldn't open file!"; + } + + outFile << textMessage << std::endl; + + outFile.close(); +} diff --git a/week12/Exercise3/Pager.h b/week12/Exercise3/Pager.h new file mode 100644 index 0000000..451112e --- /dev/null +++ b/week12/Exercise3/Pager.h @@ -0,0 +1,19 @@ +#pragma once +#include "MobileDevice.h" + +class Pager : public MobileDevice { + char* fileName; + + void free(); + void copyFrom(const Pager& other); + +public: + Pager(); + ~Pager(); + Pager(const Pager& other); + Pager& operator=(const Pager& other); + Pager(Pager&& other); + Pager& operator=(Pager&& other); + + virtual void Show() override; +}; diff --git a/week12/Exercise3/TelecommunicationCompany.cpp b/week12/Exercise3/TelecommunicationCompany.cpp new file mode 100644 index 0000000..b059edb --- /dev/null +++ b/week12/Exercise3/TelecommunicationCompany.cpp @@ -0,0 +1,47 @@ +#include "TelecommunicationCompany.h" +#include "MobileDevice.h" + +void TelecommunicationCompany::free() { + for (int i = 0; i < size; i++) { + delete devices[i]; + } + delete[] devices; +} + +void TelecommunicationCompany::resize() { + allocated *= 2; + MobileDevice** moreDevices = new MobileDevice*[allocated]; + for (int i = 0; i < size; i++) { + moreDevices[i] = devices[i]; + } + delete[] devices; + devices = moreDevices; +} + +TelecommunicationCompany::TelecommunicationCompany() { + devices = nullptr; + allocated = size = 0; +} + +TelecommunicationCompany::~TelecommunicationCompany() { + free(); +} + +TelecommunicationCompany::TelecommunicationCompany(TelecommunicationCompany&& other) { + this->size = other.size; + this->allocated = other.allocated; + this->devices = other.devices; + other.devices = nullptr; +} + +TelecommunicationCompany& TelecommunicationCompany::operator=(TelecommunicationCompany&& other) { + if (this != &other) { + free(); + + this->size = other.size; + this->allocated = other.allocated; + this->devices = other.devices; + other.devices = nullptr; + } + return *this; +} diff --git a/week12/Exercise3/TelecommunicationCompany.h b/week12/Exercise3/TelecommunicationCompany.h new file mode 100644 index 0000000..22ce731 --- /dev/null +++ b/week12/Exercise3/TelecommunicationCompany.h @@ -0,0 +1,18 @@ +#pragma once +#include "MobileDevice.h" + +class TelecommunicationCompany { + MobileDevice** devices; + unsigned size; + unsigned allocated; + + void resize(); + + void free(); + +public: + TelecommunicationCompany(); + ~TelecommunicationCompany(); + TelecommunicationCompany(TelecommunicationCompany&& other); + TelecommunicationCompany& operator=(TelecommunicationCompany&& other); +}; diff --git a/week12/Exercise3/Telephone.cpp b/week12/Exercise3/Telephone.cpp new file mode 100644 index 0000000..1250616 --- /dev/null +++ b/week12/Exercise3/Telephone.cpp @@ -0,0 +1,6 @@ +#include "Telephone.h" +#include + +void Telephone::Show() { + std::cout << textMessage << std::endl; +} diff --git a/week12/Exercise3/Telephone.h b/week12/Exercise3/Telephone.h new file mode 100644 index 0000000..aac94e6 --- /dev/null +++ b/week12/Exercise3/Telephone.h @@ -0,0 +1,6 @@ +#pragma once +#include "MobileDevice.h" + +class Telephone : public MobileDevice { + virtual void Show() override; +}; -- cgit v1.2.3