From 9df824046053be5e081b19476d94776b5c57b042 Mon Sep 17 00:00:00 2001 From: aortigos Date: Wed, 10 Sep 2025 23:58:23 +0200 Subject: [PATCH] Init ex02 --- ex02/Fixed/Fixed.cpp | 118 +++++++++++++++++++++++++++++++++++++++++++ ex02/Fixed/Fixed.hpp | 77 ++++++++++++++++++++++++++++ ex02/Makefile | 25 +++++++++ ex02/main.cpp | 31 ++++++++++++ 4 files changed, 251 insertions(+) create mode 100644 ex02/Fixed/Fixed.cpp create mode 100644 ex02/Fixed/Fixed.hpp create mode 100644 ex02/Makefile create mode 100644 ex02/main.cpp diff --git a/ex02/Fixed/Fixed.cpp b/ex02/Fixed/Fixed.cpp new file mode 100644 index 0000000..bee77d2 --- /dev/null +++ b/ex02/Fixed/Fixed.cpp @@ -0,0 +1,118 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Fixed.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: aortigos value = nb * (1 << this->fract); +} + +// Constructor with constant floating-point number +Fixed::Fixed(const float nb) +{ + std::cout << "Float constructor called" << std::endl; + this->value = roundf(nb * (1 << this->fract)); +} + +// Copy constructor +Fixed::Fixed(const Fixed &other) +{ + std:: cout << "Copy constructor called" << std::endl; + this->value = other.value; +} + +// Copy assignment operator overload +Fixed& Fixed::operator=(Fixed const &other) +{ + std::cout << "Copy assignment operator called" << std::endl; + if (this != &other) + this->value = other.getRawBits(); + return (*this); +} + +// Destructor +Fixed::~Fixed() +{ + std::cout << "Destructor called" << std::endl; +} + +// getRawBits() +int Fixed::getRawBits( void ) const +{ + std::cout << "getRawBits member function called" << std::endl; + return (this->value); +} + +// setRawBits() +void Fixed::setRawBits( int const raw ) +{ + this->value = raw; +} + +// toFloat +float Fixed::toFloat( void ) const +{ + return (this->value / (float)(1 << this->fract)); +} + +// toInt +int Fixed::toInt( void ) const +{ + return (this->value >> this->fract); +} + +// · Comparison operators +bool Fixed::operator<(const Fixed &other) +{ + return (this->value < other->value); +} + +bool Fixed::operator<=(const Fixed &other) +{ + return (this->value <= other->value); +} + +bool Fixed::operator>(const Fixed &other) +{ + return (this->value > other->value); +} + +bool Fixed::operator>=(const Fixed &other) +{ + return (this->value >= other->value); +} + +bool Fixed::operator==(const Fixed &other) +{ + return (this->value == other->value); +} + +bool Fixed::operator!=(const Fixed &other) +{ + return (this->value != other->value); +} + +// << operator overload +std::ostream& operator<<(std::ostream& os, Fixed const &other) +{ + os << other.toFloat(); + return (os); +} \ No newline at end of file diff --git a/ex02/Fixed/Fixed.hpp b/ex02/Fixed/Fixed.hpp new file mode 100644 index 0000000..725ff8a --- /dev/null +++ b/ex02/Fixed/Fixed.hpp @@ -0,0 +1,77 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Fixed.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: aortigos +# include + +class Fixed +{ + private: + int value; + static const int fract = 8; + + public: + // Default constructor + Fixed(); + + // Constructor with constant integer + Fixed(const int nb); + + // Constructor with constant floating-point number + Fixed(const float nb); + + // Copy constructor + Fixed(const Fixed &other); + + // Copy assignment operator overload + Fixed& operator=(Fixed const &other); + + // Destructor + ~Fixed(); + + // getRawBits + int getRawBits( void ) const; + + // setRawBits + void setRawBits( int const raw ); + + // toFloat + float toFloat( void ) const; + + // toInt + int toInt( void ) const; + + // · Comparison operators + bool Fixed::operator<(const Fixed &other); + bool Fixed::operator<=(const Fixed &other); + bool Fixed::operator>(const Fixed &other); + bool Fixed::operator>=(const Fixed &other); + bool Fixed::operator==(const Fixed &other); + bool Fixed::operator!=(const Fixed &other); + + // · Arithmetic operators + + // · Increments / decrements + + // · Max and min + + +}; + +// << operator overload +std::ostream& operator<<(std::ostream& os, Fixed const &other); + +#endif \ No newline at end of file diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..03bd326 --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,25 @@ +NAME = fixed + +SRCS = main.cpp Fixed/Fixed.cpp +OBJS=$(SRCS:.cpp=.o) + +CC=c++ +CFLAGS=-Wall -Wextra -Werror -std=c++98 + +all: $(NAME) + +$(NAME): $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o $(NAME) + +%.o: %.cpp + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJS) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all clean fclean re diff --git a/ex02/main.cpp b/ex02/main.cpp new file mode 100644 index 0000000..adbf848 --- /dev/null +++ b/ex02/main.cpp @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: aortigos