From 5dda3a1f40e4e8f621b20f374c02b6d1e241e7cf Mon Sep 17 00:00:00 2001 From: angeld55 Date: Tue, 10 May 2022 20:06:53 +0300 Subject: sem 11 --- Sem. 10/Examples/Optional/Optional.hpp | 74 ++++++++++++++++++++++++++++++++++ Sem. 10/Examples/Optional/Source2.cpp | 19 +++++++++ 2 files changed, 93 insertions(+) create mode 100644 Sem. 10/Examples/Optional/Optional.hpp create mode 100644 Sem. 10/Examples/Optional/Source2.cpp (limited to 'Sem. 10/Examples/Optional') diff --git a/Sem. 10/Examples/Optional/Optional.hpp b/Sem. 10/Examples/Optional/Optional.hpp new file mode 100644 index 0000000..9e3ab0f --- /dev/null +++ b/Sem. 10/Examples/Optional/Optional.hpp @@ -0,0 +1,74 @@ +#pragma once +#include +#include +template +class Optional +{ + T* data; //DYN MEM + + void copyFrom(const Optional& other); + void free(); +public: + Optional(); + Optional(const T& obj); + + bool containsData() const; + const T& getData() const; + void setData(const T& el); + void clear(); + + +}; + +template +Optional::Optional() : data(nullptr) +{} + +template +Optional::Optional(const T& obj) : data(nullptr) +{ + setData(obj); +} + +template +bool Optional::containsData() const +{ + return data != nullptr; +} + +template +const T& Optional::getData() const +{ + if (!containsData()) + throw std::logic_error("No data in optional"); + return *data; +} + +template +void Optional::setData(const T& el) +{ + delete data; + data = new T(el);// copy const; +} + +template +void Optional::copyFrom(const Optional& other) +{ + if (other.containsData()) + data = new T(*other.data); + else + data = nullptr; +} + +template +void Optional::free() +{ + delete data; +} + +template +void Optional::clear() +{ + free(); + data = nullptr; +} diff --git a/Sem. 10/Examples/Optional/Source2.cpp b/Sem. 10/Examples/Optional/Source2.cpp new file mode 100644 index 0000000..7c3e21b --- /dev/null +++ b/Sem. 10/Examples/Optional/Source2.cpp @@ -0,0 +1,19 @@ +#include +#include "Optional.hpp" + + + +int main() +{ + Optional d; //no value + + d.setData(3); + + d.getData(); + + d.clear(); + + + std::cout << d.containsData(); + +} -- cgit v1.3.1-23-gd82d