Listes chainées

Signaler
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
-
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
-
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

Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
1
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
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
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.
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
1
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