Bonjour je bloque sur la définition d'un constructeur de recopie d'une classe "liste" afin de sortir du programme principale sans provoque une exeption ou erreur... :)
Je me doute que cela tourne autour des "news" et "delete" mais je dois mal les utiliser... merci pour une solution et voici le code :
****************************************************
l'entete
//---------------------------------------------------------------------------
#ifndef MULTIPLE
#define MULTIPLE
//---------------------------------------------------------------------------
#include <iostream>
#include <cstddef>
using namespace std;
//---------------------------------------------------------------------------
/* Définition de la structure element
*/
struct element
{
element *suivant; // un pointeur sur l'élément suivant
void *contenu; // un pointeur de type indéfini sur le contenu
};
/* Définition de la classe liste
*/
class liste
{
element *debut; // le premier élément
element *courant; // l'élément courant (en traitement)
public :
inline liste(); // constructeur
inline ~liste(); // destructeur
//inline liste(const liste &);
void ajoute(void *);
void premier();
void * prochain();
int fini();
};
//---------------------------------------------------------------------------
inline liste :: liste()
{
debut = NULL;
courant = NULL;
}
//---------------------------------------------------------------------------
inline liste :: ~liste()
{
element *suiv;
courant = debut;
while(courant != NULL)
{
suiv = courant->suivant;
delete courant;
courant = suiv;
}
}
//---------------------------------------------------------------------------
/*inline liste :: liste(const liste &l)
{
a définir
}*/
//---------------------------------------------------------------------------
void liste :: ajoute(void *chose)
{
element *adel = new element;
adel->suivant = debut;
adel->contenu = chose;
debut = adel;
}
//---------------------------------------------------------------------------
void liste :: premier()
{
courant = debut;
}
//---------------------------------------------------------------------------
void * liste :: prochain()
{
void * adel = NULL;
if(courant != NULL)
{
adel = courant->contenu;
courant = courant->suivant;
}
return adel;
}
//---------------------------------------------------------------------------
int liste :: fini()
{
return (courant == NULL);
}
//---------------------------------------------------------------------------
/*
*/
class point
{
int x;
int y;
public :
inline point(int abs, int ord);
inline point(const point &);
inline point & operator =(const point &);
inline ~point();
inline void affiche();
};
//---------------------------------------------------------------------------
inline point :: point(int abs=0, int ord=0)
{
x = abs;
y = ord;
}
//---------------------------------------------------------------------------
inline point :: point(const point &pt)
{
x = pt.x;
y = pt.y;
}
//---------------------------------------------------------------------------
inline point & point :: operator =(const point &pt)
{
if(&pt != this)
{
x = pt.x;
y = pt.y;
}
return *this;
}
//---------------------------------------------------------------------------
inline point :: ~point()
{
}
//---------------------------------------------------------------------------
void point :: affiche()
{
cout << "Coordonnees : " << x << " " << y << "\n";
}
//---------------------------------------------------------------------------
/*
*/
class liste_points : public liste, public point
{
public :
liste_points() {}
void affiche();
};
//---------------------------------------------------------------------------
void liste_points :: affiche()
{
premier();
while( ! fini() )
{
point *ptr = (point*) prochain();
ptr->affiche();
}
}
//---------------------------------------------------------------------------
#endif
**********************************************************
le main
//---------------------------------------------------------------------------
#include "multiple.h"
void f(liste);
//---------------------------------------------------------------------------
int main()
{
liste_points l, l_temp;
point a(2,3);
point b(5,9);
point c(0,8);
l.ajoute(&a);
l.affiche();
cout << "---------------------\n";
l.ajoute(&b);
l.affiche();
cout << "---------------------\n";
l.ajoute(&c);
l.affiche();
cout << "---------------------\n";
f(l);
return 0;
}
//---------------------------------------------------------------------------
void f(liste l)
{
}