CLASSE PILE DYNAMIQUE

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 23 mai 2004 à 14:31
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 24 mai 2004 à 20:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23090-classe-pile-dynamique

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 mai 2004 à 20:38
pour une question de clarté, c'est mieux de les definir en dehor de l'interface de la classe, mais c'est une question de gout

normalement le corps de la classe n'est que la meta-definition de la classe (la description en gros)
cs_timinou Messages postés 29 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 5 mars 2007
24 mai 2004 à 20:29
pourquoi est-ce que tu sors les inline?
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 mai 2004 à 20:25
ah, j'ai oublié de remplacer

// Affichages
int afficherPriorite(int i) const {return (_tab[i]._priorite);};
std::string afficherNom(int i) const {return (_tab[i]._nom);};

par

// Affichages
int afficherPriorite(int i) const;
std::string afficherNom(int i) const;
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 mai 2004 à 20:22
a mon gout le ..h devrait etre comme ca ;)

#ifndef ____PILE_H_____
#define ____PILE_H_____

#include
#include <string>

class Pile {

public:
struct element
{
std::string _nom ;
unsigned short _priorite;
};

// Constructeurs et destructeur
Pile();
Pile(int);
Pile(const Pile & tmp);
~Pile();

Pile & operator = (const Pile & tmp);
void viderPile();

// Affichages
int afficherPriorite(int i) const {return (_tab[i]._priorite);};
std::string afficherNom(int i) const {return (_tab[i]._nom);};
void afficherPile();
friend std::ostream & operator << (std::ostream & affichage,const Pile & pile);

void allongerPile();
void empiler(std::string chaine,int priorite);
void sauvegarder() const;
void charger();

private:
int _taille;
int _longueur;
element * _tab;
};

inline int Pile::afficherPriorite(int i) const
{
return (_tab[i]._priorite);
}

inline std::string Pile::afficherNom(int i) const
{
return (_tab[i]._nom);
}
#endif // ____PILE_H_____
cs_timinou Messages postés 29 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 5 mars 2007
24 mai 2004 à 20:13
donc dans le .C ça gene pas c'est ça?jvai regarder si j'en ai dans le .h tout de suite......
et jvai mettre a jour le code j'avais oublié de faire pas mal de trucs :-S
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 mai 2004 à 19:48
le using namespace std tu peux le mettre sans crainte dans le .C de la definition de la classe vu que c'est pre compiler

sinon comme dit Pamaury, ne met jamais de using namespace std dans le .h et utilise le prefixe std::, tu sais pas ce que ca peu impliquer
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
24 mai 2004 à 18:38
juste un truc pas méchant mais plutôt que de fire
using namespace std
utilise std::
devant chaque truc(c'est un lourd parfois) mais si jamais tu fait le même prog avec une lib et qu'il y a des conflits, tu serra très content . Voila
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 mai 2004 à 19:05
ben c'est pas bon d'utiliser systematiquement endl, tu force l'affichage à chaque fois et tu le ralenti considerablement

c'est vrai que vu comme ca on voit pas la difference, mais c'est pas une bonne habitude

sinon utiliser endl sur cerr comprend que c'est comique vu que cerr n'est pas bufferisée, si tu ve une sortie erreur bufferisée utilise clog
cs_timinou Messages postés 29 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 5 mars 2007
23 mai 2004 à 18:59
merci à vous 2, jvè reprendre vos conseils et retaffer dessus un peu là.....
sinon std::memcpy jla connais pas officiellement donc jvai éviter..et les endl c'est comme ça qu'on m'a appris pour que se soit plus propre,peut etre que c'est rajouté mais c'est une philosophie j'y peu rien moi :-).....si vous avez d'autres conseils n'hesitez po !
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 mai 2004 à 16:23
sinon pour les copie de buffer utilise std::memcpy au lieu d'une boucle

pour les fichier #include <fstream> et pas #include <fstream.h> et ne les fermes pas, ca se fait tout seul à la sortie de la fonction

surtout supprime tout ces endl (utilise des '\n'), l'utilisation est carrement abusive
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
23 mai 2004 à 16:11
Autant la faire en template, comme ca ca peut resservir ....
et puis la fonction allongerpile ne servira probablement pas beaucoup comparée a un fonction qui permet de décider la future taille de la pile :

void Pile::resize(int size)
{
Pile tmp(size);
tmp._longueur=_longueur;
for (int i=0; i<size; i++)
tmp._tab[i]=_tab[i];
*this=tmp;
_taille=tmp._taille;
_longueur=tmp._longueur;
delete [] tmp._tab;
}

ou un truc comme, le code au dessus c' est juste pr montrer l' idée.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 mai 2004 à 14:31
const int ==> aucun effet
ne fait pas de cerr << ... <<endl, ca sert a rien et prend l'habitude avec cout de passer à la ligne avec '\n'
pour les indices des tableau pense à utiliser size_t au lieu de int

pour l'operateur = ta une grosse fuite

Pile & Pile::operator = (const Pile & tmp) {
if (this==&tmp) return *this;
delete[] _tab;
_tab=new element[tmp._taille];
_taille=tmp._taille;
_longueur=tmp._longueur;
for(int i=0;i<_longueur;i++) {_tab[i]=tmp._tab[i];}
return *this;
}
Rejoignez-nous