raison différente : son premier argument est de type ostream.
Voici la déclaration de notre classe set_int :
/* fichier SETINT.H : déclaration de la classe set_int */
#include
using namespace std ;
class set_int
{ int * adval ; // adresse du tableau des valeurs
int nmax ; // nombre maxi d'éléments
int nelem ; // nombre courant d'éléments
public :
set_int (int = 20) ; // constructeur
set_int (set_int &) ; // constructeur par recopie
// voir remarque 1 ci-après
set_int & operator = (set_int &) ; // opérateur d'affectation
// voir remarque 2 ci-après
~set_int () ; // destructeur
int cardinal () ; // cardinal de l'ensemble
set_int & operator << (int) ; // ajout d'un élément
friend int operator % (int, set_int &) ; // appartenance d'un élément
// voir remarque 3 ci-après
// envoi ensemble dans un flot, voir remarque 4
friend ostream & operator << (ostream &, set_int &) ;
} ;
Voici ce que pourrait être la définition de notre classe (les points délicats sont
commentés au sein même des instructions) :
#include "setint.h"
#include
using namespace std ;
/*************** constructeur ********************/
set_int::set_int (int dim)
{ adval = new int [nmax = dim] ; // allocation tableau de valeurs
nelem = 0 ;
}
/****************** destructeur ******************/
set_int::~set_int ()
{ delete adval ; // libération tableau de valeurs
}
/********** constructeur par recopie *************/
set_int::set_int (set_int & e)
{ adval = new int [nmax = e.nmax] ; // allocation nouveau tableau
nelem = e.nelem ;
int i ;
for (i=0 ; i
adval[i] = e.adval[i] ;
}
/************ opérateur d'affectation ************/
set_int & set_int::operator = (set_int & e)//commentaires fait pour b = a
{ if (this != &e) // on ne fait rien pour a = a
{ delete adval ; // libération partie dynamique de b
adval = new int [nmax = e.nmax] ; // allocation nouvel ensemble pour a
nelem = e.nelem ; // dans lequel on recopie
int i ; // entièrement l'ensemble b
for (i=0 ; i
adval[i] = e.adval[i] ;
}
return * this ;
}
/************ fonction membre cardinal ***********/
int set_int::cardinal ()
{ return nelem ;
348
Voici la déclaration de notre classe set_int :
/* fichier SETINT.H : déclaration de la classe set_int */
#include
using namespace std ;
class set_int
{ int * adval ; // adresse du tableau des valeurs
int nmax ; // nombre maxi d'éléments
int nelem ; // nombre courant d'éléments
public :
set_int (int = 20) ; // constructeur
set_int (set_int &) ; // constructeur par recopie
// voir remarque 1 ci-après
set_int & operator = (set_int &) ; // opérateur d'affectation
// voir remarque 2 ci-après
~set_int () ; // destructeur
int cardinal () ; // cardinal de l'ensemble
set_int & operator << (int) ; // ajout d'un élément
friend int operator % (int, set_int &) ; // appartenance d'un élément
// voir remarque 3 ci-après
// envoi ensemble dans un flot, voir remarque 4
friend ostream & operator << (ostream &, set_int &) ;
} ;
Voici ce que pourrait être la définition de notre classe (les points délicats sont
commentés au sein même des instructions) :
#include "setint.h"
#include
using namespace std ;
/*************** constructeur ********************/
set_int::set_int (int dim)
{ adval = new int [nmax = dim] ; // allocation tableau de valeurs
nelem = 0 ;
}
/****************** destructeur ******************/
set_int::~set_int ()
{ delete adval ; // libération tableau de valeurs
}
/********** constructeur par recopie *************/
set_int::set_int (set_int & e)
{ adval = new int [nmax = e.nmax] ; // allocation nouveau tableau
nelem = e.nelem ;
int i ;
for (i=0 ; i
}
/************ opérateur d'affectation ************/
set_int & set_int::operator = (set_int & e)//commentaires fait pour b = a
{ if (this != &e) // on ne fait rien pour a = a
{ delete adval ; // libération partie dynamique de b
adval = new int [nmax = e.nmax] ; // allocation nouvel ensemble pour a
nelem = e.nelem ; // dans lequel on recopie
int i ; // entièrement l'ensemble b
for (i=0 ; i
}
return * this ;
}
/************ fonction membre cardinal ***********/
int set_int::cardinal ()
{ return nelem ;
348
