Bonjour à tous,
ce TP est à rendre pour demain donc j'espere avoir une réponse ce soir.
Le sujet du TP C++ est simple, ecrire 2 classes : liste et maillons.
Le maillon contient un champ :
int data
donc çà marche mais tt c compliqué quand il a fallu tout passer en classe générique ie :
T data
Je n'ai aucune erreur de compilation, mais plusieurs dans les liens.
Ca ne doit vraiment pas etre grand chose.
Je vous poste le debut de chaque fichier, a mon avis c surtout lors des inclusions que ca ne va pas alors que ca marhait tres bien sans les templates
Merci d'avance.
-------------------------------------------------------------------------------------
//fichier maillon.h
#ifndef MAILLON_H
#define MAILLON_H
// Classe maillon
template <class T>
class maillon {
private:
T data ;
maillon<T>* suivant ;
public:
// Forme canonique de Coplien
maillon() ;
maillon(const T&);
maillon(const maillon<T>&) ;
~maillon() ;
maillon<T>& operator=(const maillon<T>&) ;
// Accesseurs
T get_data(){return data;}//fonction inline
maillon<T>* get_suivant(){return suivant;}//fonction inline
// Mutateurs
void set_data(T d){data = d;}
void set_suivant(maillon<T>* m){suivant = m;}
};
#endif
-------------------------------------------------------------------------------------
//fichier maillon.cc
#include "maillon.h"
#include <iostream.h>
//constructeur par defaut
template <class T>
maillon<T>::maillon()
{
suivant = NULL;
}
//constructeur pour initialiser la data
template <class T>
maillon<T>::maillon(const T& d)
{
data = d;
suivant = NULL;
}
//constructeur par copie
template <class T>
maillon<T>::maillon(const maillon<T>& m)
{
data = m.data;
suivant = m.suivant;
}
--------------------------------------------------------------------------------------
// fichier liste.h
//liste.h
#ifndef LISTE_H
#define LISTE_H
#include "maillon.h"
#include <iostream.h>
// Classe liste
template <class T>
class liste {
private:
maillon<T> *tete,*courant, *fin ;
int nb;
public:
// Forme canonique de Coplien
liste() ;
liste(const liste<T>&);
~liste(){supprime();}
liste<T>& operator=(const liste<T>&) ;
// Ajout de maillons
liste<T>& operator+ (const T&) ;
liste<T>& operator+ (const maillon<T>&) ;
liste<T>& operator+ (const liste<T>&) ;
// Suppression de maillons
// liste<T>& operator- (const T&) ; // suppression de la premiere occurence de T
liste<T>& operator- (int) ; // suppression du maillon d'indice donne
// Suppression
liste<T>& supprime_tete() ; // supprime la tete de la liste
liste<T>& supprime() ; // supprime tous les elements de la liste
// Entrees-sorties
void affiche () ;
friend ostream& operator<<(ostream&,liste<T>&);
// Autres methodes et operateurs
liste<T>& insere_tete(const T& d);
liste<T>& insere(const maillon<T>&, int); // les maillons sont numérotés de 0 à nb-1
// insertion d'un maillon à un indice donné
};
#endif
--------------------------------------------------------------------------------------
// fichier liste.cc
#include "liste.h"
#include <iostream.h>
/*-------------------------------------------
CONSTRUCTEURS
-------------------------------------------*/
//par defaut
template <class T>
liste<T>::liste()
{
nb = 0;
tete = fin = courant = NULL;
}
//de recopie
template <class T>
liste<T>::liste(const liste<T>& l):tete(NULL),fin(NULL),courant(NULL),nb(l.nb)
{
*this + l;
}
-------------------------------------------------------------------------------------
//fichier client.cc qui teste les 2 classes
#include <stdio.h>
#include <iostream.h>
#include "liste.h"
int main(int argc, char* argv[])
{
cout << "Test TP2" << endl;
maillon<int> m1(8); //on veut des maillons qui contiennent des int
maillon<int> m2(13);
maillon<int> m3(15);
maillon<int> m4(9);
maillon<int> m5(3);
maillon<int> m6(1233);
liste<int> l1;
cout << m1.get_data() << endl;
l1 + m1 + m2 + 25; // on ajoute deux maillons m1 et m2
// et un maillon qui aura 25 pour data
// à liste l1
l1.insere(m3,0);
l1.insere(m6,8); // insertion à un indice donné
l1.insere(m5,3);
l1.affiche();
l1 - 2; // on supprime le maillon à l'indice 2
cout << l1; // surcharge de << */
//pour eviter que la fenetre ne se referme à la fin de l'execution
char *s;
scanf("%s",s);
return 0;
}