first version of ex00

This commit is contained in:
whaffman 2025-06-23 23:31:09 +02:00
parent 1e75a92c41
commit c9639437ed
7 changed files with 246 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.vscode/settings.json
Bureaucrat
*.o

View File

@ -0,0 +1,35 @@
# **************************************************************************** #
# #
# :::::::: #
# Makefile :+: :+: #
# +:+ #
# By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ #
# Created: 2025/03/21 14:50:00 by whaffman #+# #+# #
# Updated: 2025/03/21 14:58:40 by whaffman ######## odam.nl #
# #
# **************************************************************************** #
EX = $(shell find . -maxdepth 1 -type d -name 'ex*' -exec basename {} \;)
all:
for ex in $(EX); do \
$(MAKE) -C $$ex; \
done
clean:
for ex in $(EX); do \
$(MAKE) -C $$ex clean; \
done
fclean:
for ex in $(EX); do \
$(MAKE) -C $$ex fclean; \
done
re:
for ex in $(EX); do \
$(MAKE) -C $$ex re; \
done
.PHONY: all clean fclean re

36
common.mk Normal file
View File

@ -0,0 +1,36 @@
# **************************************************************************** #
# #
# :::::::: #
# common.mk :+: :+: #
# +:+ #
# By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ #
# Created: 2025/03/21 15:00:16 by whaffman #+# #+# #
# Updated: 2025/03/21 15:04:44 by whaffman ######## odam.nl #
# #
# **************************************************************************** #
INC = -I./inc
VPATH = src
# SRC = $(wildcard *.cpp)
OBJ = $(SRC:.cpp=.o)
CC = c++
CFLAGS = -Wall -Wextra -Werror -std=c++11
all: $(NAME)
$(NAME): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(NAME)
%.o: %.cpp
$(CC) $(CFLAGS) $(INC) -c $< -o $@
clean:
rm -f $(OBJ)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re

4
ex00/Makefile Normal file
View File

@ -0,0 +1,4 @@
NAME = Bureaucrat
SRC = main.cpp Bureaucrat.cpp
-include ../common.mk

40
ex00/inc/Bureaucrat.hpp Normal file
View File

@ -0,0 +1,40 @@
#pragma once
#include <string>
#include <exception>
#define HIGHEST_GRADE 1
#define LOWEST_GRADE 150
class Bureaucrat
{
private:
const std::string _name;
int _grade;
public:
Bureaucrat() = delete;
Bureaucrat(std::string name, int grade);
Bureaucrat(Bureaucrat &other);
~Bureaucrat();
Bureaucrat &operator=(Bureaucrat &other) = delete;
Bureaucrat &operator++(); // Pre-increment
Bureaucrat operator++(int); // Post-increment
Bureaucrat &operator--(); // Pre-decrement
Bureaucrat operator--(int); // Post-decrement
Bureaucrat &operator+=(int value);
Bureaucrat &operator-=(int value);
int getGrade() const;
const std::string getName() const;
class GradeTooHighException: public std::exception {
const char * what() const throw();
};
class GradeTooLowException: public std::exception {
const char *what() const throw();
};
};

90
ex00/src/Bureaucrat.cpp Normal file
View File

@ -0,0 +1,90 @@
#include "Bureaucrat.hpp"
#include <iostream>
Bureaucrat::Bureaucrat(std::string name, int grade): _name(name)
{
std::cout << "Bureaucrat parameterized constructor called" << std::endl;
if (grade < HIGHEST_GRADE)
throw(Bureaucrat::GradeTooHighException());
if (grade > LOWEST_GRADE)
throw(Bureaucrat::GradeTooLowException());
_grade = grade;
std::cout << "Bureaucrat made with the name: " << _name << std::endl;
}
Bureaucrat::Bureaucrat(Bureaucrat &other) :_name(other._name), _grade(other._grade)
{
std::cout << "Bureaucrat copy constructor" << std::endl;
}
Bureaucrat::~Bureaucrat()
{
std::cout << "Bureaucrat deconstructor called" << std::endl;
}
Bureaucrat &Bureaucrat::operator++() // Pre-increment
{
if (_grade <= HIGHEST_GRADE)
throw(Bureaucrat::GradeTooHighException());
_grade--;
return *this;
}
Bureaucrat Bureaucrat::operator++(int) // Post-increment
{
Bureaucrat temp(*this);
++(*this);
return temp;
}
Bureaucrat &Bureaucrat::operator--() // Pre-decrement
{
if (_grade >= LOWEST_GRADE)
throw(Bureaucrat::GradeTooLowException());
_grade++;
return *this;
}
Bureaucrat Bureaucrat::operator--(int) // Post-decrement
{
Bureaucrat temp(*this);
--(*this);
return temp;
}
Bureaucrat &Bureaucrat::operator+=(int value)
{
if (_grade - value < HIGHEST_GRADE)
throw(Bureaucrat::GradeTooHighException());
_grade -= value;
return *this;
}
Bureaucrat &Bureaucrat::operator-=(int value)
{
if (_grade + value > LOWEST_GRADE)
throw(Bureaucrat::GradeTooLowException());
_grade += value;
return *this;
}
int Bureaucrat::getGrade() const
{
return _grade;
}
const std::string Bureaucrat::getName() const
{
return _name;
}
const char * Bureaucrat::GradeTooHighException::what() const throw()
{
return "Grade too high!";
}
const char * Bureaucrat::GradeTooLowException::what() const throw()
{
return "Grade too low!";
}

37
ex00/src/main.cpp Normal file
View File

@ -0,0 +1,37 @@
#include <iostream>
#include <string>
#include "Bureaucrat.hpp"
int main (void)
{
Bureaucrat jan("jan", 3);
Bureaucrat copy(jan);
try
{
Bureaucrat bob("bob", 0); // This should throw an exception
}
catch (std::exception &e)
{
std::cerr << "Caught exception: " << e.what() << std::endl;
}
try
{
Bureaucrat alice("alice", 151); // This should also throw an exception
}
catch (std::exception &e)
{
std::cerr << "Caught exception: " << e.what() << std::endl;
}
try
{
Bureaucrat charlie("charlie", 1);
++charlie; // This should throw an exception
}
catch (std::exception &e)
{
std::cerr << "Caught exception: " << e.what() << std::endl;
}
}