runproject uwu

This commit is contained in:
Mylloon 2023-10-28 02:09:10 +02:00
parent 8d3b9973a6
commit 7b2726c5d2
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
8 changed files with 31 additions and 19 deletions

View file

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

View file

@ -5,15 +5,21 @@
#include <algorithm>
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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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