#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;
}