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

sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
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
0