From d45a096244636738209d129bf87433e13bc11bdc Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Wed, 16 Feb 2022 13:48:33 +0100 Subject: [PATCH] overload operators en cours --- d02/ex02/Fixed.cpp | 44 ++++++++++++++++++-------- d02/ex02/Fixed.hpp | 17 ++++++---- d02/ex02/Makefile | 2 +- d02/ex02/fixed | Bin 18816 -> 0 bytes d02/ex02/main.cpp | 75 ++++++++++++++++++++++++++++++++++++++++----- d02/ex02/operators | Bin 0 -> 32064 bytes 6 files changed, 112 insertions(+), 26 deletions(-) delete mode 100755 d02/ex02/fixed create mode 100755 d02/ex02/operators diff --git a/d02/ex02/Fixed.cpp b/d02/ex02/Fixed.cpp index d6a1a22..8de7902 100644 --- a/d02/ex02/Fixed.cpp +++ b/d02/ex02/Fixed.cpp @@ -94,24 +94,44 @@ Fixed & Fixed::operator=( Fixed const & rhs ) { } /* - * other operators + * operators < ; > ; <= ; == ; != ; + ; - ; * ; / ; ++ ; -- */ -//Fixed Fixed::operator+( Fixed const & rhs ) const { -// return Fixed( this->toFloat() + rhs.toFloat() ); -//} bool Fixed::operator< (Fixed const & rhs) const { + return this->toFloat() < rhs.toFloat(); +} +bool Fixed::operator> (Fixed const & rhs) const { return this->toFloat() > rhs.toFloat(); } -//Fixed operator> (Fixed const & rhs) const { +bool Fixed::operator<=(Fixed const & rhs) const { + return this->toFloat() <= rhs.toFloat(); +} +bool Fixed::operator>=(Fixed const & rhs) const { + return this->toFloat() >= rhs.toFloat(); +} +bool Fixed::operator==(Fixed const & rhs) const { + return this->toFloat() == rhs.toFloat(); +} +bool Fixed::operator!=(Fixed const & rhs) const { + return this->toFloat() != rhs.toFloat(); +} +Fixed Fixed::operator+ ( Fixed const & rhs ) const { + return Fixed( this->toFloat() + rhs.toFloat() ); +} +Fixed Fixed::operator- ( Fixed const & rhs ) const { + return Fixed( this->toFloat() - rhs.toFloat() ); +} +Fixed Fixed::operator* ( Fixed const & rhs ) const { + return Fixed( this->toFloat() * rhs.toFloat() ); +} +Fixed Fixed::operator/ ( Fixed const & rhs ) const { + return Fixed( this->toFloat() / rhs.toFloat() ); +} +//void Fixed::operator++( void ){ +// this->_value += 1; //} -//Fixed operator<=(Fixed const & rhs) const { -//} -//Fixed operator>=(Fixed const & rhs) const { -//} -//Fixed operator==(Fixed const & rhs) const { -//} -//Fixed operator!=(Fixed const & rhs) const { +//void Fixed::operator--( void ){ +// this->_value -= 1; //} diff --git a/d02/ex02/Fixed.hpp b/d02/ex02/Fixed.hpp index 066237b..62e199c 100644 --- a/d02/ex02/Fixed.hpp +++ b/d02/ex02/Fixed.hpp @@ -16,13 +16,18 @@ public: Fixed(float const floater); Fixed & operator= (Fixed const & rhs); // assignement operator -// Fixed operator+ (Fixed const & rhs) const; bool operator< (Fixed const & rhs) const; -// Fixed operator> (Fixed const & rhs) const; -// Fixed operator<=(Fixed const & rhs) const; -// Fixed operator>=(Fixed const & rhs) const; -// Fixed operator==(Fixed const & rhs) const; -// Fixed operator!=(Fixed const & rhs) const; + bool operator> (Fixed const & rhs) const; + bool operator<=(Fixed const & rhs) const; + bool operator>=(Fixed const & rhs) const; + bool operator==(Fixed const & rhs) const; + bool operator!=(Fixed const & rhs) const; + Fixed operator+ (Fixed const & rhs) const; + Fixed operator- (Fixed const & rhs) const; + Fixed operator* (Fixed const & rhs) const; + Fixed operator/ (Fixed const & rhs) const; +// void operator++(void); +// void operator--(void); int getRawBits(void) const; void setRawBits(int const raw); diff --git a/d02/ex02/Makefile b/d02/ex02/Makefile index 0712445..5531831 100644 --- a/d02/ex02/Makefile +++ b/d02/ex02/Makefile @@ -4,7 +4,7 @@ # . value . or .cpp # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # -NAME = fixed +NAME = operators CC = clang++ CFLAGS = -Wall -Wextra -Werror $(INCLUDES) -std=c++98 diff --git a/d02/ex02/fixed b/d02/ex02/fixed deleted file mode 100755 index 69fcc15c54336d9993d0ad75bd38fedaf6840260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18816 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 +#include int main( void ) { @@ -20,13 +21,73 @@ int main( void ) { Fixed d(5); Fixed e; - std::cout << "c: " << d << '\n'; - std::cout << "d: " << c << '\n'; - if (c < d) - e = c; - else - e = d; - std::cout << "e: " << e << '\n'; + std::cout << "c: " << c << '\n'; + std::cout << "d: " << d << "\n\n"; + + // ">" + std::cout << "e = greater of (c, d) : e == " << (e = (c > d) ? c : d) << '\n'; + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e > c ? : " << (e > c) << '\n'; + std::cout << "e > d ? : " << (e > d) << "\n\n"; + // "<" + std::cout << "e = smaller of (c, d) : e == " << (e = (c < d) ? c : d) << '\n'; + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e < c ? : " << (e < c) << '\n'; + std::cout << "e < d ? : " << (e < d) << "\n\n"; + // "<=" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e <= c ? : " << (e <= c) << '\n'; + std::cout << "e <= d ? : " << (e <= d) << "\n\n"; + // ">=" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e >= c ? : " << (e >= c) << '\n'; + std::cout << "e >= d ? : " << (e >= d) << "\n\n"; + // "==" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e == c ? : " << (e == c) << '\n'; + std::cout << "e == d ? : " << (e == d) << "\n\n"; + // "!=" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e != c ? : " << (e != c) << '\n'; + std::cout << "e != d ? : " << (e != d) << "\n\n"; + // "+" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e = c + d : " << (e = c + d) << "\n"; + std::cout << "e = e + c + d : " << (e = e + c + d) << "\n\n"; + // "-" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e = d - e ? : " << (e = d - e) << "\n"; + std::cout << "e = c - d - e ? : " << (e = c - d - e) << "\n\n"; + // "*" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e = d * c ? : " << (e = d * c) << "\n"; + std::cout << "e = d * c * c ? : " << (e = d * c * c) << "\n\n"; + // "/" + std::cout << "e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "e = d / c ? : " << (e = d / c) << "\n"; + std::cout << "e = d / c / e ? : " << (e = d / c / e) << "\n\n"; + // "+ - * /" + Fixed f; + Fixed g; + std::cout << "f:" << f << " e:" << e << " c:" << c << " d:" << d << '\n'; + std::cout << "f = e + d / c - d / e * c ? : " << (f = e + d / c - d / e * c) << '\n'; + std::cout << "g = d / c ? : " << std::setw(5) << std::left << (g = d / c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; + std::cout << "g = e + g ? : " << std::setw(5) << std::left << (g = e + g) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; + std::cout << "f = d / e ? : " << std::setw(5) << std::left << (f = d / e) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; + std::cout << "f = f * c ? : " << std::setw(5) << std::left << (f = f * c) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; + std::cout << "f = g - f ? : " << std::setw(5) << std::left << (f = g - f) << "[f:" << std::setw(5) << std::left << f << " g:" << std::setw(5) << std::left << g << " e:" << e << " c:" << c << " d:" << d << "]\n"; + // "++x" +// std::cout << "e : " << e << '\n'; +// std::cout << "e++ : " << ++e << "\n\n"; +// // "--x" +// std::cout << "e : " << e << '\n'; +// std::cout << "e-- : " << --e << "\n\n"; + // "x++" +// std::cout << "e : " << e << '\n'; +// std::cout << "e++ : " << e++ << "\n\n"; +// // "x--" +// std::cout << "e : " << e << '\n'; +// std::cout << "e-- : " << e-- << "\n\n"; return 0; } diff --git a/d02/ex02/operators b/d02/ex02/operators new file mode 100755 index 0000000000000000000000000000000000000000..1311aab54b08c73ce2b9c3af2ff1ecf743019ce9 GIT binary patch literal 32064 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 literal 0 HcmV?d00001