ex01 done

This commit is contained in:
2025-09-10 22:05:18 +02:00
parent 1bc2ed6af6
commit 9be6499649
4 changed files with 208 additions and 0 deletions

87
ex01/Fixed/Fixed.cpp Normal file
View File

@@ -0,0 +1,87 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Fixed.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/09/10 00:54:50 by tigos #+# #+# */
/* Updated: 2025/09/10 22:02:52 by aortigos ### ########.fr */
/* */
/* ************************************************************************** */
#include "Fixed.hpp"
// Default constructor
Fixed::Fixed()
{
std::cout << "Default constructor called" << std::endl;
}
// · Constructor with constant integer
Fixed::Fixed(const int nb)
{
std::cout << "Int constructor called" << std::endl;
this->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);
}
// · << operator overload
std::ostream& operator<<(std::ostream& os, Fixed const &other)
{
os << other.toFloat();
return (os);
}

62
ex01/Fixed/Fixed.hpp Normal file
View File

@@ -0,0 +1,62 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* Fixed.hpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/09/10 00:54:53 by tigos #+# #+# */
/* Updated: 2025/09/10 22:01:18 by aortigos ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FIXED_HPP
# define FIXED_HPP
# include <iostream>
# include <cmath>
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;
};
// · << operator overload
std::ostream& operator<<(std::ostream& os, Fixed const &other);
#endif

25
ex01/Makefile Normal file
View File

@@ -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

34
ex01/main.cpp Normal file
View File

@@ -0,0 +1,34 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/09/10 21:57:38 by aortigos #+# #+# */
/* Updated: 2025/09/10 21:57:43 by aortigos ### ########.fr */
/* */
/* ************************************************************************** */
#include "Fixed/Fixed.hpp"
int main( void ) {
Fixed a;
Fixed const b( 10 );
Fixed const c( 42.42f );
Fixed const d( b );
a = Fixed( 1234.4321f );
std::cout << "a is " << a << std::endl;
std::cout << "b is " << b << std::endl;
std::cout << "c is " << c << std::endl;
std::cout << "d is " << d << std::endl;
std::cout << "a is " << a.toInt() << " as integer" << std::endl;
std::cout << "b is " << b.toInt() << " as integer" << std::endl;
std::cout << "c is " << c.toInt() << " as integer" << std::endl;
std::cout << "d is " << d.toInt() << " as integer" << std::endl;
return (0);
}