diff options
Diffstat (limited to 'week09/Exercise1')
| -rw-r--r-- | week09/Exercise1/Printer.cpp | 50 | ||||
| -rw-r--r-- | week09/Exercise1/Printer.h | 15 |
2 files changed, 65 insertions, 0 deletions
diff --git a/week09/Exercise1/Printer.cpp b/week09/Exercise1/Printer.cpp new file mode 100644 index 0000000..b8e6195 --- /dev/null +++ b/week09/Exercise1/Printer.cpp @@ -0,0 +1,50 @@ +#include "Printer.h" +#include <cstring> + +void Printer::free() { + delete[] model; +} + +void Printer::copyFrom(const Printer& other) { + this->model = new char[strlen(other.model) + 1]; + strcpy(this->model, other.model); + this->printedPages = other.printedPages; +} + +Printer::Printer() { + model = nullptr; + printedPages = 0; +} + +Printer::~Printer() { + free(); +} + +Printer::Printer(const Printer& other) { + copyFrom(other); +} + +Printer& Printer::operator=(const Printer& other) { + if (this != &other) { + free(); + copyFrom(other); + } + return *this; +} + +Printer::Printer(Printer&& other) { + this->model = other.model; + other.model = nullptr; + this->printedPages = other.printedPages; +} + +Printer& Printer::operator=(Printer&& other) { + if (this != &other) { + free(); + + this->model = other.model; + other.model = nullptr; + this->printedPages = other.printedPages; + } + return *this; +} diff --git a/week09/Exercise1/Printer.h b/week09/Exercise1/Printer.h new file mode 100644 index 0000000..52a737e --- /dev/null +++ b/week09/Exercise1/Printer.h @@ -0,0 +1,15 @@ +class Printer { + char* model; + unsigned printedPages; + + void free(); + void copyFrom(const Printer& other); + +public: + Printer(); + ~Printer(); + Printer(const Printer& other); + Printer& operator=(const Printer& other); + Printer(Printer&& other); + Printer& operator=(Printer&& other); +}; |
