Héritage FiFo Lifo
aymenkn
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai le diagramme de classe suivant, les classe PileFifo et PileLifo hériter de la classe BasePile, et chaque pile se compose des cellule
http://image.noelshack.com/fichiers/2014/15/1396901121-class-diagram.png
j'ai le programme principale
l'empiler et le dépiler à l'aide d'une liste chaînée
main.cpp
je fais la classe cellule
Cellul.h
et la classe BasePile
BasePile.h
j'ai un problème pour les surcharge de l'operateur empiler,dépiler pour PileFifo et PileLifo et l'affichage de chaque pile
Je ne sais pas comment le faire :/ je fais pour Fifo mais je ne sais pas est ce que correcte ou nn
S'il vous plaît aidez-moi
BasePile.cpp
j'ai le diagramme de classe suivant, les classe PileFifo et PileLifo hériter de la classe BasePile, et chaque pile se compose des cellule
http://image.noelshack.com/fichiers/2014/15/1396901121-class-diagram.png
j'ai le programme principale
l'empiler et le dépiler à l'aide d'une liste chaînée
main.cpp
#include "BasePile.h" using namespace std; int main(int argc, char** argv) { BasePile * ptPile; PileFifo fifo; PileLifo lifo; ptPile = &fifo; //FIFO *ptPile < 0 < 1; cout<<"pile="<<*ptPile; int i; *ptPile > i; cout<<"pile="<<*ptPile<<"i="<<i; ptPile=&lifo; //LIFO *ptPile < 0 < 1; cout<<"pile="<<*ptPile; *ptPile > i; cout<<"pile="<<*ptPile<<"i="<<i; return 0; }
je fais la classe cellule
Cellul.h
#ifndef CELLUL_H #define CELLUL_H #include <iostream> using namespace std; class Cellul { friend class BasePile; friend class PileFifo; friend class PileLifo; int info; Cellul * succ; public: Cellul(int x=0){ cout<<"construction cellule"; info=x; succ=NULL; } ~Cellul(){ delete succ; } }; #endif
et la classe BasePile
BasePile.h
#ifndef BASEPILE_H #define BASEPILE_H #include <iostream> using namespace std; #include "Cellul.h" class BasePile { protected: Cellul * last; // le dernier noeud inserer public: virtual void operator > (int & x)=0; //surcharge de l'operateur > (dépiler) méthode abstraite virtual BasePile & operator < (int x)=0; //surcharge de l'operateur > (empiler) méthode abstraite friend ostream & operator<<(ostream & , BasePile & ); // surcharge de l'operateur d'affichage BasePile(){ last=NULL; cout<<"Constructeur par defaut de BasePile"; } bool vide(){ if(last == NULL) return true; else return false; } ~BasePile(){ if(last != NULL) vide(); } }; class PileFifo:public BasePile{ public: void operator>(int& x); PileFifo & operator < (int x); }; class PileLifo:public BasePile{ public: void operator>(int& x); PileLifo & operator < (int x); }; #endif
j'ai un problème pour les surcharge de l'operateur empiler,dépiler pour PileFifo et PileLifo et l'affichage de chaque pile
Je ne sais pas comment le faire :/ je fais pour Fifo mais je ne sais pas est ce que correcte ou nn
S'il vous plaît aidez-moi
BasePile.cpp
#include "BasePile.h" // PileFifo //*** Surcharge de l'operateur < (empiler) PileFifo & PileFifo::operator < (int x){ Cellul* tmp = last; last = new Cellul(x); last->succ = tmp; } //*** Surcharge de l'operateur > (dépiler) void PileFifo::operator > (int & x){ x = last->info; Cellul* tmp = last; last = last->succ; delete tmp; } // PileLifo //*** Surcharge de l'operateur < (empiler) PileLifo & PileLifo::operator<(int x){ } //*** Surcharge de l'operateur > (dépiler) void PileLifo::operator > (int & x){ } //*** redefinition de l'operateur << ostream & operator << (ostream & s, BasePile & p){ }
1 réponse
Bonjour
Je vais juste faire une remarque que je pense très importante.
Tout d'abord ton beau diagramme UML a-t-il fait objet d'une bonne conceptualisation car je le rappelle, le but de la conceptualisation est de comprendre et structurer les besoins pour par la suite clarifier, filtrer et organiser les besoins. Une fois que tu as identifié et structuré ces besoins tu définiras le contour du système à modéliser c'est-à-dire le but à atteindre qui te permettront d'identifier les fonctionnalités principales de ton application bref je ne vais pas faire un cours UML.
Mais tu as défini tes cellules comme étant une classe donc la molle d'un objet ce qui est pour moi déjà une erreur sérieuse, il est préférable de la définir comme étant une structure enfin si je me fais comprendre. bref le reste se présentera en implémentation comme une liste chaînée avec des méthodes implémentées dans ta classe Base et enfin dans les autres classes tu pourras choisir la façon tu veux manipuler tes objets ou donnée soit en PILE ou en FILE et pas besoin de déclarée autant d'objet juste une des deux classes exemple FIFO pour empiler la donnée éditée préalablement ou dépiler une donnée de tête où faire d'autre manipulation comme retourner le nombre de donner etc. et utiliser des surcharges peut être bonne idée mais sans plus je préférerais une fonction à la place.
à bientôt
Je vais juste faire une remarque que je pense très importante.
Tout d'abord ton beau diagramme UML a-t-il fait objet d'une bonne conceptualisation car je le rappelle, le but de la conceptualisation est de comprendre et structurer les besoins pour par la suite clarifier, filtrer et organiser les besoins. Une fois que tu as identifié et structuré ces besoins tu définiras le contour du système à modéliser c'est-à-dire le but à atteindre qui te permettront d'identifier les fonctionnalités principales de ton application bref je ne vais pas faire un cours UML.
Mais tu as défini tes cellules comme étant une classe donc la molle d'un objet ce qui est pour moi déjà une erreur sérieuse, il est préférable de la définir comme étant une structure enfin si je me fais comprendre. bref le reste se présentera en implémentation comme une liste chaînée avec des méthodes implémentées dans ta classe Base et enfin dans les autres classes tu pourras choisir la façon tu veux manipuler tes objets ou donnée soit en PILE ou en FILE et pas besoin de déclarée autant d'objet juste une des deux classes exemple FIFO pour empiler la donnée éditée préalablement ou dépiler une donnée de tête où faire d'autre manipulation comme retourner le nombre de donner etc. et utiliser des surcharges peut être bonne idée mais sans plus je préférerais une fonction à la place.
à bientôt