aboutsummaryrefslogtreecommitdiff
path: root/cpp07/ex02
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-14 20:42:26 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-14 20:42:26 +0200
commit7ac812044bfe771178752a52d70b18bb297c1891 (patch)
tree5f5faf0d627304cdfe1f1f45194b3da76653fff8 /cpp07/ex02
parentefea8712aaf8169b1184cceb83705ca6b8783173 (diff)
downloadpiscine_cpp-7ac812044bfe771178752a52d70b18bb297c1891.tar.gz
piscine_cpp-7ac812044bfe771178752a52d70b18bb297c1891.tar.bz2
piscine_cpp-7ac812044bfe771178752a52d70b18bb297c1891.zip
cpp07 done, cpp06 ex00 and ex01 start
Diffstat (limited to 'cpp07/ex02')
-rw-r--r--cpp07/ex02/Array.hpp72
-rw-r--r--cpp07/ex02/Makefile35
-rw-r--r--cpp07/ex02/main.cpp81
3 files changed, 188 insertions, 0 deletions
diff --git a/cpp07/ex02/Array.hpp b/cpp07/ex02/Array.hpp
new file mode 100644
index 0000000..fec8698
--- /dev/null
+++ b/cpp07/ex02/Array.hpp
@@ -0,0 +1,72 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* Array.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 20:14:07 by charles #+# #+# */
+/* Updated: 2020/04/14 20:41:25 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef ARRAP_HPP
+# define ARRAP_HPP
+
+#include <exception>
+
+template<typename T>
+class Array
+{
+public:
+ Array() : m_under(new T[0]), m_size(0)
+ {}
+
+ Array(unsigned int n) : m_under(new T[n]()), m_size(n)
+ {}
+
+ Array(Array const& other) : m_under(new T[other.m_size]), m_size(other.m_size)
+ {
+ for (unsigned int i = 0; i < m_size; i++)
+ m_under[i] = other.m_under[i];
+ }
+
+ void operator=(Array const& other)
+ {
+ delete [] m_under;
+ m_size = other.m_size;
+ m_under = new T[m_size];
+ for (unsigned int i = 0; i < m_size; i++)
+ m_under[i] = other.m_under[i];
+ }
+
+ ~Array()
+ {
+ delete [] m_under;
+ }
+
+ T& operator[](unsigned int n)
+ {
+ if (n >= m_size)
+ throw std::exception();
+ return m_under[n];
+ }
+
+ T const& operator[](unsigned int n) const
+ {
+ if (n >= m_size)
+ throw std::exception();
+ return m_under[n];
+ }
+
+ unsigned int size() const
+ {
+ return m_size;
+ }
+
+private:
+ T* m_under;
+ unsigned int m_size;
+};
+
+#endif
diff --git a/cpp07/ex02/Makefile b/cpp07/ex02/Makefile
new file mode 100644
index 0000000..239a977
--- /dev/null
+++ b/cpp07/ex02/Makefile
@@ -0,0 +1,35 @@
+# **************************************************************************** #
+# #
+# ::: :::::::: #
+# Makefile :+: :+: :+: #
+# +:+ +:+ +:+ #
+# By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ #
+# +#+#+#+#+#+ +#+ #
+# Created: 2020/04/14 19:48:34 by charles #+# #+# #
+# Updated: 2020/04/14 20:39:03 by charles ### ########.fr #
+# #
+# **************************************************************************** #
+
+NAME = array
+
+CXX = clang++
+CXXFLAGS = -std=c++98 -Wall -Wextra -Werror
+
+SRC = main.cpp
+OBJ = $(SRC:.cpp=.o)
+
+all: $(NAME)
+
+$(NAME): $(OBJ)
+ $(CXX) -o $@ $^
+
+%.o: %.cpp Array.hpp
+ $(CXX) $(CXXFLAGS) -c -o $@ $<
+
+clean:
+ rm -rf $(OBJ)
+
+fclean: clean
+ rm -rf $(NAME)
+
+re: fclean all
diff --git a/cpp07/ex02/main.cpp b/cpp07/ex02/main.cpp
new file mode 100644
index 0000000..251d697
--- /dev/null
+++ b/cpp07/ex02/main.cpp
@@ -0,0 +1,81 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* main.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 20:25:44 by charles #+# #+# */
+/* Updated: 2020/04/14 20:41:40 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <iostream>
+#include "Array.hpp"
+
+int main()
+{
+ Array<int> a;
+ std::cout << a.size() << std::endl;
+ try
+ {
+ std::cout << a[0] << std::endl;
+ }
+ catch (std::exception e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ std::cout << "------------------------" << std::endl;
+
+ Array<int> b(3);
+ std::cout << b.size() << std::endl;
+ std::cout << b[0] << ", " << b[1] << ", " << b[2] << std::endl;
+ b[0] = 1;
+ b[1] = 2;
+ b[2] = 3;
+ std::cout << b[0] << ", " << b[1] << ", " << b[2] << std::endl;
+ try
+ {
+ std::cout << b[3] << std::endl;
+ }
+ catch (std::exception e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ std::cout << "------------------------" << std::endl;
+
+ Array<float> c(3);
+ std::cout << c.size() << std::endl;
+ c[0] = 1.3;
+ c[1] = 2.2;
+ c[2] = 3.1;
+ std::cout << c[0] << ", " << c[1] << ", " << c[2] << std::endl;
+ try
+ {
+ std::cout << c[3] << std::endl;
+ }
+ catch (std::exception e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ std::cout << "------------------------" << std::endl;
+
+ Array<float> d(c);
+ std::cout << d.size() << std::endl;
+ d[0] = 10.12;
+ std::cout << d[0] << " <> " << c[0] << std::endl;
+ std::cout << d[1] << " <> " << c[1] << std::endl;
+ std::cout << d[2] << " <> " << c[2] << std::endl;
+ std::cout << "------------------------" << std::endl;
+
+ Array<float> f;
+ std::cout << f.size() << std::endl;
+ f = c;
+ std::cout << f.size() << std::endl;
+ f[0] = 10.12;
+ std::cout << f[0] << " <> " << c[0] << std::endl;
+ std::cout << f[1] << " <> " << c[1] << std::endl;
+ std::cout << f[2] << " <> " << c[2] << std::endl;
+
+ return 0;
+}