From e145977d2e10920101e116adb152443bb8905077 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Wed, 22 Jan 2025 16:25:15 +0100 Subject: [PATCH] Implement solution to ex02 --- ex02/Array.h | 29 ++++++++++++++++++++++++++ ex02/Array.tpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ ex02/Makefile | 52 +++++++++++++++++++++++++++++++++++++++++++++++ ex02/main.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 183 insertions(+) create mode 100644 ex02/Array.h create mode 100644 ex02/Array.tpp create mode 100644 ex02/Makefile create mode 100644 ex02/main.cpp diff --git a/ex02/Array.h b/ex02/Array.h new file mode 100644 index 0000000..3c63146 --- /dev/null +++ b/ex02/Array.h @@ -0,0 +1,29 @@ +#ifndef ARRAY_H +# define ARRAY_H + +#include + +typedef std::size_t size_t; + +template +class Array +{ + private: + size_t m_size; + T *m_array; + + public: + Array(); + Array(size_t n); + Array(const Array &other); + ~Array(); + + Array &operator=(const Array &other); + + T &operator[](size_t i); + size_t size(void) const; +}; + +#include "Array.tpp" + +#endif // ARRAY_H diff --git a/ex02/Array.tpp b/ex02/Array.tpp new file mode 100644 index 0000000..ae2a2b6 --- /dev/null +++ b/ex02/Array.tpp @@ -0,0 +1,55 @@ +#include + +template +Array::Array() + : m_size(0) + , m_array(NULL) +{ +} + +template +Array::Array(size_t n) + : m_size(n) + , m_array(new T[n]) +{ +} + +template +Array::Array(const Array &other) + : m_array(NULL) +{ + *this = other; +} + +template +Array::~Array() +{ + delete[] (m_array); +} + +template +Array &Array::operator=(const Array &other) +{ + if (this == &other) + return (*this); + m_size = other.size(); + delete[] (m_array); + m_array = new T[m_size]; + for (size_t i(0); i < m_size; ++i) + m_array[i] = other.m_array[i]; + return (*this); +} + +template +T &Array::operator[](size_t i) +{ + if (i >= m_size) + throw (std::exception()); + return (m_array[i]); +} + +template +size_t Array::size(void) const +{ + return (m_size); +} diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..e2cde4f --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,52 @@ +CC := c++ +CFLAGS = -std=c++98 -Wall -Wextra -Werror -Wpedantic + +ifneq ("$(wildcard .debug)","") + CFLAGS += -g +endif + +RM := rm -f + +INCDIR := inc +INCDIR += $(addsuffix /inc, $(SUBPROJECTS)); +ifneq ($(INCLUDE),) + INCLUDE := $(addprefix -I, $(INCDIR)) +endif + +SRCDIR := . + +SOURCES := main.cpp \ + +SOURCES := $(addprefix $(SRCDIR)/, $(SOURCES)) + +OBJECTS := $(SOURCES:.cpp=.o) + +NAME := array + +all : $(NAME) + +debug : .debug + $(MAKE) all + +nodebug : + $(RM) .debug + $(MAKE) re + +.% : + $(MAKE) fclean + touch $@ + +$(NAME) : $(OBJECTS) + $(CC) $(CFLAGS) -o $@ $^ $(LINKS) + +%.o : %.cpp + $(CC) $(CFLAGS) -o $@ -c $< $(INCLUDE) + +clean : + $(RM) $(OBJECTS) + +fclean : clean + $(RM) $(NAME) + +re : fclean + $(MAKE) all diff --git a/ex02/main.cpp b/ex02/main.cpp new file mode 100644 index 0000000..74e325d --- /dev/null +++ b/ex02/main.cpp @@ -0,0 +1,47 @@ +#include "Array.h" +#include + +template +void print_array(Array &arr) +{ + std::cout << "Array: "; + for (size_t i(0); i < arr.size() - 1; ++i) + std::cout << arr[i] << ", "; + std::cout << arr[arr.size() - 1] << '\n'; +} + +int main(void) +{ + Array i_arr(5); + Array d_arr(3); + + print_array(i_arr); + print_array(d_arr); + i_arr[0] = 5; + i_arr[1] = 15; + i_arr[2] = 93; + i_arr[3] = 9282384; + i_arr[4] = 832; + d_arr[0] = 54.54654; + d_arr[1] = 0.234541; + try + { + d_arr[2] = 2146584.21; + d_arr[3] = 45.24584; + } + catch (const std::exception &exception) + { + std::cout << "Cought an invalid access\n"; + } + print_array(i_arr); + print_array(d_arr); + try + { + std::cout << i_arr[6]; + } + catch (const std::exception &exception) + { + std::cout << "Cought an invalid access\n"; + } + return (0); +} -- 2.30.2