base & suivant () ; // passage élément suivant
int existe () ; //
void liste () ; // affiche les "valeurs" des différents éléments
} ;
La classe base (déclaration et définition) découle directement de l'énoncé :
class base
{ public :
virtual void affiche () = 0 ;
} ;
Voici la définition des fonctions membre de ens_heter (notez que leur compilation
nécessite la déclaration (définition) précédente de la classe base (et non pas seulement
une simple indication de la forme class base) :
/* définition de la classe ens_heter */
#include "ensheter.h"
ens_heter::ens_heter (int dim)
{ nmax = dim ;
adel = new base * [dim] ;
nelem = 0 ;
courant = 0 ; // précaution
}
ens_heter::~ens_heter ()
{ delete adel ;
}
void ens_heter::ajoute (base & obj)
{ if ((nelem < nmax) && (!appartient (obj))) adel [nelem++] = & obj ;
}
int ens_heter::appartient (base & obj)
{ int trouve = 0 ;
init () ;
while ( existe () && !trouve) if ( &suivant() == & obj) trouve=1 ;
return trouve ;
}
int ens_heter::cardinal ()
{ return nelem ;
}
void ens_heter::init ()
{ courant = 0 ;
}
base & ens_heter::suivant ()
{ if (courant
// en pratique, il faudrait renvoyer un objet "bidon" si fin
// ensemble atteinte
}
int ens_heter::existe ()
{ return (courant
}
void ens_heter::liste ()
{ init () ;
while ( existe () )
suivant () . affiche () ;
}
Voici un petit programme qui définit deux classes point et complexe, dérivées de base et qui
crée un petit ensemble hétérogène (sa compilation nécessite la déclaration de la classe
base). À la suite figure le résultat de son exécution :
282
int existe () ; //
void liste () ; // affiche les "valeurs" des différents éléments
} ;
La classe base (déclaration et définition) découle directement de l'énoncé :
class base
{ public :
virtual void affiche () = 0 ;
} ;
Voici la définition des fonctions membre de ens_heter (notez que leur compilation
nécessite la déclaration (définition) précédente de la classe base (et non pas seulement
une simple indication de la forme class base) :
/* définition de la classe ens_heter */
#include "ensheter.h"
ens_heter::ens_heter (int dim)
{ nmax = dim ;
adel = new base * [dim] ;
nelem = 0 ;
courant = 0 ; // précaution
}
ens_heter::~ens_heter ()
{ delete adel ;
}
void ens_heter::ajoute (base & obj)
{ if ((nelem < nmax) && (!appartient (obj))) adel [nelem++] = & obj ;
}
int ens_heter::appartient (base & obj)
{ int trouve = 0 ;
init () ;
while ( existe () && !trouve) if ( &suivant() == & obj) trouve=1 ;
return trouve ;
}
int ens_heter::cardinal ()
{ return nelem ;
}
void ens_heter::init ()
{ courant = 0 ;
}
base & ens_heter::suivant ()
{ if (courant
// ensemble atteinte
}
int ens_heter::existe ()
{ return (courant
void ens_heter::liste ()
{ init () ;
while ( existe () )
suivant () . affiche () ;
}
Voici un petit programme qui définit deux classes point et complexe, dérivées de base et qui
crée un petit ensemble hétérogène (sa compilation nécessite la déclaration de la classe
base). À la suite figure le résultat de son exécution :
282
