diff options
sem 11
4 files changed, 150 insertions, 0 deletions
| -rw-r--r-- | Sem. 10/Examples/Optional/Optional.hpp | 74 | ||||
| -rw-r--r-- | Sem. 10/Examples/Optional/Source2.cpp | 19 | ||||
| -rw-r--r-- | Sem. 10/Examples/Pair/Pair.hpp | 43 | ||||
| -rw-r--r-- | Sem. 10/Examples/Pair/Source2.cpp | 14 |
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 <iostream> +#include <exception> +template <typename T> +class Optional +{ + T* data; //DYN MEM + + void copyFrom(const Optional<T>& other); + void free(); +public: + Optional(); + Optional(const T& obj); + + bool containsData() const; + const T& getData() const; + void setData(const T& el); + void clear(); + + +}; + +template <typename T> +Optional<T>::Optional() : data(nullptr) +{} + +template <typename T> +Optional<T>::Optional(const T& obj) : data(nullptr) +{ + setData(obj); +} + +template <typename T> +bool Optional<T>::containsData() const +{ + return data != nullptr; +} + +template <typename T> +const T& Optional<T>::getData() const +{ + if (!containsData()) + throw std::logic_error("No data in optional"); + return *data; +} + +template <typename T> +void Optional<T>::setData(const T& el) +{ + delete data; + data = new T(el);// copy const; +} + +template <typename T> +void Optional<T>::copyFrom(const Optional<T>& other) +{ + if (other.containsData()) + data = new T(*other.data); + else + data = nullptr; +} + +template <typename T> +void Optional<T>::free() +{ + delete data; +} + +template <typename T> +void Optional<T>::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 <iostream> +#include "Optional.hpp" + + + +int main() +{ + Optional<int> d; //no value + + d.setData(3); + + d.getData(); + + d.clear(); + + + std::cout << d.containsData(); + +} diff --git a/Sem. 10/Examples/Pair/Pair.hpp b/Sem. 10/Examples/Pair/Pair.hpp new file mode 100644 index 0000000..adf16b7 --- /dev/null +++ b/Sem. 10/Examples/Pair/Pair.hpp @@ -0,0 +1,43 @@ +#pragma once + +template<typename T, typename D> +class Pair +{ + T first; + D second; +public: + Pair() = default; + Pair(const T& first, const D& second); + const T& getFirst() const; + const D& getSecond() const; + + void setFirst(const T& newValue); + void setSecond(const D& newValue); +}; + +template<typename T, typename D> +Pair<T,D>::Pair(const T& first, const D& second) : first(first), second(second) +{} + +template<typename T, typename D> +const T& Pair<T, D>::getFirst() const +{ + return first; +} +template<typename T, typename D> +const D& Pair<T, D>::getSecond() const +{ + return second; +} + +template<typename T, typename D> +void Pair<T, D>::setFirst(const T& newValue) +{ + first = newValue; +} + +template<typename T, typename D> +void Pair<T, D>::setSecond(const D& newValue) +{ + second = newValue; +}
\ No newline at end of file diff --git a/Sem. 10/Examples/Pair/Source2.cpp b/Sem. 10/Examples/Pair/Source2.cpp new file mode 100644 index 0000000..39229da --- /dev/null +++ b/Sem. 10/Examples/Pair/Source2.cpp @@ -0,0 +1,14 @@ +#include <iostream> +#include "Pair.hpp" + + + +int main() +{ + Pair<int, char> p(3, 'd'); + + std::cout << p.getSecond(); + + p.setSecond('a'); + +} |
