#include#include using namespace std; class chaine { private: string s; public: chaine() {cout << "appel du constructeur par défaut de chaine" << endl;} chaine(const string & _s) { s= _s; } chaine(const chaine & c) { s= c.getValue(); cout << "appel du constructeur de copies de chaine pour " << s << endl; } string getValue() {return s;} void setValue(const string & _s) {s= _s;} }; class Etudiant { private: int id; chaine nom; public: Etudiant(int _id, chaine _nom) { id= _id; nom= _nom; } chaine getNom() {return nom;} int getID() {return id;} }; int main(int argc, char ** argv) { cout << "construction de la chaine toto\n"; chaine toto("toto"); cout << "construction de l'étudiant\n"; Etudiant e(1, toto); cout << "nom de l'étudiant :\n"; cout << e.getNom().getValue() << endl; }
construction de la chaine toto construction de l'étudiant appel du constructeur de copies de chaine pour toto nom de l'étudiant : toto
On créera deux classes : Liste et ElementListe. Une Liste contient un pointeur vers son premier élément. Dans le cas de la liste vide, ce pointeur vaut 0. Un ElementListe a la forme :
class ElementListe { private: int valeur; ElementListe * suivant; ElementListe(int val); ~ElementListe(); // La déclaration suivante autorise // la classe Liste à accéder aux éléments privés // de ElementListe friend Liste; };
Liste
et testez-le.
friend ostream & operator<<(ostream &s, const Liste &l);On dit que l'opérateur <<, quand il prend comme argument une sortie et une liste, a accès à la représentation interne de Liste.
Il ne vous reste plus qu'à implémenter l'opérateur pour qu'il écrive les éléments de Liste&nobr;:
ostream & operator<<(ostream &s, const Liste &l) { // Affiche le contenu de la liste .... // Retourne le flux de sortie (pour composition cout << a << b...) return s; }