Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 10
diff options
context:
space:
mode:
Commit5dda3a1f40e4e8f621b20f374c02b6d1e241e7cf (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2022-05-10 20:06:53 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2022-05-10 20:06:53 +0300
Files52f913ec9532fd07c8f679ccf1e68876d1fc9ff2 /Sem. 10
Object-oriented_programming_FMI-5dda3a1f40e4e8f621b20f374c02b6d1e241e7cf.tar
Object-oriented_programming_FMI-5dda3a1f40e4e8f621b20f374c02b6d1e241e7cf.tar.gz
Object-oriented_programming_FMI-5dda3a1f40e4e8f621b20f374c02b6d1e241e7cf.zip
Parent459d3ac280aafdba703930455f3200b6e7b0f31b (diff)
sem 11
4 files changed, 150 insertions, 0 deletions
-rw-r--r--Sem. 10/Examples/Optional/Optional.hpp74
-rw-r--r--Sem. 10/Examples/Optional/Source2.cpp19
-rw-r--r--Sem. 10/Examples/Pair/Pair.hpp43
-rw-r--r--Sem. 10/Examples/Pair/Source2.cpp14
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');
+
+}