From 7b2726c5d2154e6237ec785bbaf878a60173cc42 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sat, 28 Oct 2023 02:09:10 +0200 Subject: [PATCH] runproject uwu --- TODO.md | 2 +- includes/Projet.hpp | 11 +++++++---- includes/ProtoProjet.hpp | 4 ++-- includes/RunProjet.hpp | 5 +++-- src/Projet.cpp | 10 +++++----- src/ProtoProjet.cpp | 2 +- src/RunProjet.cpp | 12 ++++++++++-- src/main.cpp | 4 ++-- 8 files changed, 31 insertions(+), 19 deletions(-) diff --git a/TODO.md b/TODO.md index 33286b2..26eea03 100644 --- a/TODO.md +++ b/TODO.md @@ -51,7 +51,7 @@ TODO avant rendu : #### RunProjet -- [ ] Construit uniquement via un `ProtoProjet` +- [x] Construit uniquement via un `ProtoProjet` - [ ] Avance vers sa conclusion en prenant en compte des tâches ponctuelles - [ ] Vide le contenu d'un `ProtoProjet` pour se construire, rendre les tâches "read-only" - Méthodes (cf. le PDF du prof) diff --git a/includes/Projet.hpp b/includes/Projet.hpp index b1eb71d..0f81563 100644 --- a/includes/Projet.hpp +++ b/includes/Projet.hpp @@ -5,15 +5,21 @@ #include +struct RunProjet; + class Projet { friend std::ostream &operator<<(std::ostream &, const Projet &); + friend RunProjet; // Auxilliaire pour simplifier les copies void _copy(const Projet &); // Auxiliiaire pour simplifier la libération de mémoire des tâches - void _free(); + void free_taches(); + + // Remet tous les marquages à leur valeur initiale + virtual void cleanMarks() const = 0; protected: Tache @@ -44,9 +50,6 @@ protected: // Corrige les éventuelles anomalies du vector de tâches void topologicalSort(); - - // Remet tous les marquages à leur valeur initiale - virtual void cleanMarks() const = 0; }; #endif diff --git a/includes/ProtoProjet.hpp b/includes/ProtoProjet.hpp index c3aa9c4..2d48eab 100644 --- a/includes/ProtoProjet.hpp +++ b/includes/ProtoProjet.hpp @@ -7,6 +7,8 @@ class ProtoProjet : public Projet { friend std::ostream &operator<<(std::ostream &, const ProtoProjet &); + void cleanMarks() const; + public: ProtoProjet(); // constructor virtual ~ProtoProjet(); // destructor @@ -14,8 +16,6 @@ public: ProtoProjet(const ProtoProjet &); // copy constructor const ProtoProjet &operator=(const ProtoProjet &); // copy assignement - void cleanMarks() const; - // Insère une nouvelle tâche en la plaçant entre deux tâches au hasard bool ajoute(const std::string nom, const int duree); diff --git a/includes/RunProjet.hpp b/includes/RunProjet.hpp index 4a974c1..9560d5b 100644 --- a/includes/RunProjet.hpp +++ b/includes/RunProjet.hpp @@ -7,8 +7,9 @@ class RunProjet final : public ProtoProjet { friend std::ostream &operator<<(std::ostream &, const RunProjet &); public: - RunProjet(); // constructor - virtual ~RunProjet(); // destructor + RunProjet() = delete; // constructor + RunProjet(ProtoProjet &); // constructor + virtual ~RunProjet(); // destructor RunProjet(const RunProjet &); // copy constructor const RunProjet &operator=(const RunProjet &); // copy assignement diff --git a/src/Projet.cpp b/src/Projet.cpp index 3c3b13d..7d344ef 100644 --- a/src/Projet.cpp +++ b/src/Projet.cpp @@ -7,21 +7,21 @@ Projet::Projet() : debut(new Tache("Début", 0)), fin(new Tache("Fin", 0)) { taches.push_back(debut); } -Projet::~Projet() { _free(); } +Projet::~Projet() { free_taches(); } void Projet::_copy(const Projet &src) { // Copie des tâches taches.reserve(src.taches.size()); for (Tache *t : src.taches) { - Tache *tache = new Tache(*t); - taches.push_back(tache); + taches.push_back(new Tache(*t)); } } -void Projet::_free() { +void Projet::free_taches() { for (Tache *it : taches) { delete it; } + taches.clear(); } Projet::Projet(const Projet &src) : debut(src.debut), fin(src.fin) { @@ -34,7 +34,7 @@ const Projet &Projet::operator=(const Projet &src) { } debut = src.debut; fin = src.fin; - _free(); + free_taches(); _copy(src); return *this; } diff --git a/src/ProtoProjet.cpp b/src/ProtoProjet.cpp index b68246b..b702fa3 100644 --- a/src/ProtoProjet.cpp +++ b/src/ProtoProjet.cpp @@ -4,7 +4,7 @@ ProtoProjet::ProtoProjet() {} ProtoProjet::~ProtoProjet() {} -ProtoProjet::ProtoProjet(const ProtoProjet &) : Projet() {} +ProtoProjet::ProtoProjet(const ProtoProjet &src) : Projet(src) {} const ProtoProjet &ProtoProjet::operator=(const ProtoProjet &src) { if (this == &src) { diff --git a/src/RunProjet.cpp b/src/RunProjet.cpp index ae9ca61..df3ee3f 100644 --- a/src/RunProjet.cpp +++ b/src/RunProjet.cpp @@ -1,10 +1,10 @@ #include "../includes/RunProjet.hpp" -RunProjet::RunProjet() { std::cout << "Hello, runProject!\n"; } +RunProjet::RunProjet(ProtoProjet &src) : ProtoProjet(src) { src.free_taches(); } RunProjet::~RunProjet() {} -RunProjet::RunProjet(const RunProjet &) : ProtoProjet() {} +RunProjet::RunProjet(const RunProjet &src) : ProtoProjet(src) {} const RunProjet &RunProjet::operator=(const RunProjet &src) { if (this == &src) { @@ -13,3 +13,11 @@ const RunProjet &RunProjet::operator=(const RunProjet &src) { return *this; } + +std::ostream &operator<<(std::ostream &out, const RunProjet &data) { + for (Tache *t : data.taches) { + out << *t << "\n"; + } + + return out; +} diff --git a/src/main.cpp b/src/main.cpp index 26a57a6..4a5fde4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,11 +15,11 @@ int main() { cout << pp; cout << "\n----------" << endl; - /* RunProjet rp{pp}; + RunProjet rp{pp}; cout << "----- verification : ProtoProjet vide " << endl; cout << pp << endl; - Consultant c; + /* Consultant c; cout << c.avis(rp).second << endl; // dira 25 Expert e;