diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..ad00955 --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,3 @@ +override NAME = ex02.out + +include ../Makefile diff --git a/ex02/src/Array.hpp b/ex02/src/Array.hpp new file mode 100644 index 0000000..243689a --- /dev/null +++ b/ex02/src/Array.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include +#include + +template class Array { + public: + Array(); + Array(unsigned int size); + Array(const Array& other); + + Array& operator=(const Array& other); + + T& operator[](unsigned int index); + const T& operator[](unsigned int index) const; + + unsigned int size() const; + + ~Array(); + private: + T* data; + unsigned int _size; +}; + + +template Array::Array(): data(NULL), _size(0) { +} + +template Array::Array(unsigned int size): data(new T[size]()), _size(size) { +} + +template Array::Array(const Array& other): data(new T[other._size]), _size(other._size) { + for (unsigned int i = 0; i < _size; ++i) + data[i] = other.data[i]; +} + +template Array& Array::operator=(const Array& other) { + if (this == &other) + return *this; + + delete[] data; + data = new T[other._size]; + _size = other._size; + for (unsigned int i = 0; i < _size; ++i) + data[i] = other.data[i]; + + return *this; +} + +template T& Array::operator[](unsigned int index) { + if (index >= _size) + throw std::out_of_range("Array index out of range"); + + return data[index]; +} + +template const T& Array::operator[](unsigned int index) const { + if (index >= _size) + throw std::out_of_range("Array index out of range"); + + return data[index]; +} + +template unsigned int Array::size() const { + return _size; +} + +template Array::~Array() { + delete[] data; +} diff --git a/ex02/src/main.cpp b/ex02/src/main.cpp new file mode 100644 index 0000000..a2372a2 --- /dev/null +++ b/ex02/src/main.cpp @@ -0,0 +1,41 @@ +#include +#include +#include + +int main() { + { + Array a(10); + + for (unsigned int i = 0; i < a.size(); ++i) + a[i] = static_cast(i); + + Array b(a); + + for (unsigned int i = 0; i < a.size(); ++i) + assert(a[i] == b[i]); + + for (unsigned int i = 0; i < a.size(); ++i) + a[i] *= 2; + + for (unsigned int i = 0; i < a.size(); ++i) + assert(a[i] == b[i] * 2); + } + + { + Array a(10); + + for (unsigned int i = 0; i < a.size(); ++i) + a[i] = "hello"; + + Array b(a); + + for (unsigned int i = 0; i < a.size(); ++i) + assert(a[i] == b[i]); + + for (unsigned int i = 0; i < a.size(); ++i) + a[i] += " world"; + + for (unsigned int i = 0; i < a.size(); ++i) + assert(a[i] == b[i] + " world"); + } +}