snoozriton
Messages postés12Date d'inscriptionjeudi 22 décembre 2011StatutMembreDernière intervention12 novembre 2010
-
23 janv. 2010 à 18:17
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
24 janv. 2010 à 14:21
Bonjour à tous,
je me retrouve bloqué et je ne vois pas trop comment me décoincer.
Il s'agit d'un exercice à faire. Dans cet exercice nous avons des Etiquettes (ce sera une classe) et un Ensemble d'étiquettes (une autre classe).
Etiquette est composé de d'un prix et d'un info disant si le produit est en solde ou non.
Et je bloque pour faire la liste chainée dans la classe Ensemble...
Si quelqu'un peut m'éclairer.
J'ai mis la déclaration de la liste au sein de la classe. Peut-être dois-je la sortir ?
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 24 janv. 2010 à 14:21
Salut,
Soit tu utilises un conteneur de la STL, soit (si tu en est contraint) tu fais à la main, comme tu as fait.
Avec le conteneur vector de la STL, par exemple :
class Etiquette {
private:
bool solde;
float prix;
public:
void Saisie(bool s,float p) {
this->solde=s;
this->prix=p;
}
};
class Ensemble {
private:
vector <Etiquette> Liste;
public:
void initialiser(maille *l) {
this->Liste.clear();
}
void ajout(bool s,float p) {
Etiquette e;
e.Saisie(s,p);
this->Liste.push_back(e);
}
};
int main() {
Ensemble ens;
ens.initialiser();
bool s;
float p;
//On considère que s et p ont des valeurs (saisies au clavier, etc)
ens.ajout(s,p);
return 0;
}
Sinon, je ne comprends pas trop ta manière de faire... je ferais plutôt un truc dans le genre :
class Etiquette {
private:
bool solde;
float prix;
public:
void Saisie (bool s,float p) {
this->solde=s;
this->prix=p;
}
};
typedef struct maille {
Etiquette e;
struct maille *suivant;
}
maille;
class Ensemble {
private:
maille *Liste;
public:
void initialiser() {
this->Liste=NULL;//Faire gaffe ici, si ta liste contenait des éléments,
//ils ne seront pas effacés -> risque de fuite mémoire
}
void ajout(bool s,float p) {
maille *etiq=new(maille);
etiq->e.Saisie(s,p);
etiq->suivant=Liste;
Liste=etiq;
}
};
int main() {
Ensemble ens;
ens.initialiser();
bool s;
float p;
//On considère que s et p ont des valeurs (saisies au clavier, etc)
ens.ajout(s,p);
return 0;
}
Le problème avec cette méthode-ci, c'est que l'ordre est inversé (en fait, le membre "suivant" pointe sur l'élément précédent de la liste).
Il y a sans doute des erreurs, je n'ai plus de compilo sous la main. Et tu peux aussi directement intégrer l'équivalent de "maille *suivant" dans la classe Etiquette.