Listes chainées

minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 - 17 mars 2005 à 23:26
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 - 19 mars 2005 à 00:46
Voilà je suis en train de faire une appli sur les listes chainées avec
une classe. Seulement je suis sûr et certain qu'il y a plein d'erreur
(l'application marche quand même). Donc si quelqu'un a le temps de
m'aider, voici le lien pour télécharger le zip contenant le .cpp et le
.exe :

http://cyberman.inc.free.fr/listes.zip



P.S. : Je voulais mettre un constructeur dans la classe pour
initialiser les pointeurs mais après le prog affichais toujours le même
prénom.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite

4 réponses

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
18 mars 2005 à 03:14
Tu compile en C++ alors autant tout faire en C++

#include <cstring> // avec un `c` et sans `.h`
#include <cstdio> // avec un `c` et sans `.h`
#include <cstdlib> // avec un `c` et sans `.h`
#include

// pour utiliser l'espace de nom std
// ca évite de toujours écrire:
// std::cout << "Bonjour\n";
// std::cin >> variable;
// etc ...
using namespace std;

// les équivalent C <=> C++
// (conio c'est de la merde)
clrscr(); <<=>> system("cls");
scanf("%s", prenom); <=> cin.getline( prenom, sizeof(prenom)-1, '\n' ); // -1 pour le '\0' final
printf("%s\n", prenom); <<=>> cout << prenom << endl;

tu as les basic_string en C++
#include <string>
using namespace std;

string prenom;

// j'en suis pas certain mais ca fonctionne à peu pres comme ca(ca fait longtemps le C++ et moi :})
cin >> prenom;
cout << prenom << endl;

return getch(); <<=>> cin >> choice; return choice;

tu devrais mettre les attribut de ta class en `private`

class MyList
{
public:
MyList();
~MyList();

MyList * getPrevious() const {
return m_Previous;
}
// etc ...

private:

MyList * m_Previous;
MyList * m_Next;
// etc ...
};

Tu devrais aussi utiliser une class supplémentaire qui va gérer la/les donnée(s) de tes `nodes`
genre:

class MyListNode // ce sont tes nodes
{
public:
MyListNode();
~MyListNode();
MyListNode( const char * );
// etc ...

const char * getPrenom() const {
return m_Prenom;
}
const size_t getLength() const {
return m_Length;
}
// etc ...

private:

char * m_Prenom;
size_t m_Length;
};

class MyList
{
public:
MyList();
~MyList();

MyListNode * getPrevious() const {
return m_Previous;
}
// etc ...

private:

MyListNode * m_Previous;
MyListNode * m_Next;
// etc ...
};

Mes exemples ne sont pas parfaits et il ne faut pas faire du copy/paste mais il démontre quand même assez bien ce que je voulais expliquer, et ce que je voulais expliquer c'est que toi, d'après ce que j'ai vus, tu n'a aucune `auto-gestion` des nodes, tu manipule les nodes toi-même, tu devrais te faire une class(comme l'exemple ci-dessus) qui ferait l'auto-gestion des nodes, ca serait moin chiant à utiliser, autant pour toi que pour les d'autres ...

Bref, ce ne sont que des idées/conseils/etc ... alors voilà, c'est tout

@++;

~(.:: NitRic ::.)~
0
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
18 mars 2005 à 13:19
OK, pour les remarques C/C++, le reste je prend note aussi, mais pour les constructeurs et les destructeurs je n'arrive pas a init les pointeurs.

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 mars 2005 à 19:01
Tu parts de trop loin pour implementer ce genre de classe, il faudrais que tu connaisses (pour implementer proprement) :

- la POO en générale.

- la POO en C++: néssecité de redéfinir le corps Coplien, constructeurs et opérateurs de conversions (implicites et explicites).

- la surcharge des opérateurs.

- les namespaces (référenciels lexicaux).

- les templates (classes templates, spécialisation) pour avoir une solution générique.

- sommairement la STL (tant qu'a faire regarde le source de ton implementation de std::list, trés instructif).



Tu melanges trop le C et le C++ qui sont deux langages bien distincts.

Et on est bien d'accord que c'est juste pour t'exercer, si tu as besoin d'une liste utilises std::list.
0
minet03 Messages postés 415 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 2 décembre 2005 3
19 mars 2005 à 00:46
Ben je connais les classes, seulement quand j'ai fait un constructeur,
j'ai mis NULL dans les pointeurs et après la fonction pour tout
afficher affiche toujours le même prénom (le premier).

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite
0
Rejoignez-nous