Documente Academic
Documente Profesional
Documente Cultură
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Informatique II :
Cours de programmation (C++)
Hritage multiple
Jamila Sam Haroud
Laboratoire dIntelligence Articielle
Facult e I&C
Informatique II Cours 10 : H eritage multiple 1
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Objectifs du cours daujourdhui
Construction/destruction
Classes virtuelles
Informatique II Cours 10 : H eritage multiple 2
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Plan
Classes virtuelles
Informatique II Cours 10 : H eritage multiple 3
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Quest-ce que lhritage multiple
En C++, une sous-classe peut hriter de plusieurs super-classes :
Classe A Classe B
Classe C
Comme pour lhritage simple, la sous-classe hrite des super-classes :
leur type
Informatique II Cours 10 : H eritage multiple 4
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Exemple
Un exemple zoologique :
Vivipare Ovipare
Ovovivipare
Informatique II Cours 10 : H eritage multiple 5
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Exemple (2)
.. et un exemple informatique :
ios
ostream
iostream
ifstream
ofstream
fstream
istream
Informatique II Cours 10 : H eritage multiple 6
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Hritage multiple
Syntaxe :
class nomSousClasse: [public] nomSuperClasse1, ...
[public] nomSuperClasseN {
//...
};
Exemple :
class Ovovivipare: public Ovipare, public Vivipare {
public:
Ovovivipare(unsigned int, unsigned int);
virtual Ovovivipare();
protected:
bool espece rare;
};
Classes virtuelles
Informatique II Cours 10 : H eritage multiple 8
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Constructeurs/destructeurs
Comme pour lhritage simple, linitialisation des attributs hrits doit
tre faite par invocation des constructeurs des super-classes :
Syntaxe :
SousClasse(liste de param`etres)
: SuperClasse1(arguments1),
...
SuperClasseN(argumentsN),
attribut1(valeur1),
...
attributK(valeurK)
{}
Lorsque lune des super-classes admet un constructeur par dfaut, il
nest pas ncessaire de linvoquer explicitement.
Informatique II Cours 10 : H eritage multiple 9
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Constructeurs/destructeurs (2)
Attention ! Lexcution des constructeurs des super-classes se fait
selon lordre de la dclaration dhritage, et non selon lordre des
appels dans le constructeur !
Lordre des appels des destructeurs de super-classes est linverse de
celui des appels de constructeurs
Informatique II Cours 10 : H eritage multiple 10
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Constructeurs/destructeurs (3)
Exemple :
class Ovovivipare : public Ovipare, public Vivipare {
public:
Ovovivipare(unsigned int, unsigned int);
virtual Ovovivipare();
protected:
bool espece rare;
};
Ovovivipare::Ovovivipare(unsigned int nb oeufs,
unsigned int duree gestation)
: Vivipare(duree gestation),
Ovipare(nb oeufs),
espece rare(false)
{}
Classes virtuelles
Informatique II Cours 10 : H eritage multiple 12
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Accs direct ambigu
Comme dans le cas de lhritage simple, une sous-classe peut
accder directement aux attributs et mthodes protgs de ses
super-classes
... et si ces attributs/mthodes portent le mme nom
dans plusieurs super-classes ?
public:
...};
void (ostream&) const; afficher
?
?
Ovovivipare o;
...
}
int main() {
o.
class Vivipare {
public:
...};
void (ostream&) const; afficher
class Ovipare {
...
};
class Ovovivipare : public Vivipare,
public Ovipare {
afficher(cout);
Informatique II Cours 10 : H eritage multiple 13
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Accs direct ambigu (2)
Attention ! laccs o.afficher provoquera une erreur la
compilation mme si la mthode afficher navait pas les mmes
arguments dans les deux classes Ovipare et Vivipare!!!
(La raison est quen C++ il ny a surcharge que dans la mme porte. Ici ce
nest pas une problme de surcharge mais un problme de rsolution de
porte)
Premire solution : utiliser loprateur de rsolution de porte.
int main(){
Ovovivipare o;
o.Vivipare::afficher();
...
mais...
Informatique II Cours 10 : H eritage multiple 14
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Accs direct ambigu (3)
mais...
Lutilisation de loprateur de rsolution de porte pour rsoudre les
ambiguts de noms des attributs/mthodes nest pas une bonne
solution :
cest lutilisateur de la classe Ovovivipare qui dcide du
fonctionnement correct de cette classe,
alors que cette responsabilit doit normalement incomber aux
concepteurs de la classe
Informatique II Cours 10 : H eritage multiple 15
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Accs direct ambigu Solution
Une des solutions consiste lever lambigut en indiquant
explicitement quelle(s) mthode(s) on souhaite invoquer
Il faut ajouter la liste des dclarations des mthodes/attributs de la
sous-classe, une dclaration spciale indiquant quel(s)
mthode(s)/attribut(s) seront invoqu(s) exactement
Syntaxe :
using NomSuperClasse::NomAttributOuMethodeAmbigu
Exemple :
class Ovovivipare : public Ovipare, public Vivipare {
public:
using Vivipare::afficher;
...
};
Attention ! pas de parenthses (ni prototypes) derrire les noms de
mthodes dans un using!
Informatique II Cours 10 : H eritage multiple 16
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Accs direct ambigu Solution (2)
Une autre bonne solution consiste incorporer dans la sous-classe
une mthode dnissant la bonne interprtation de linvocation
ambigu.
Exemple :
class Ovovivipare: public Ovipare, public Vivipare {
public:
Ovovivipare(unsigned int, unsigned int);
virtual Ovovivipare();
void afficher(ostream& out){
Ovipare::afficher(out);
out << " mais aussi ";
Vivipare::afficher(out);
}
protected:
bool espece rare;
};
Informatique II Cours 10 : H eritage multiple 17
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Plan
Classes virtuelles
Informatique II Cours 10 : H eritage multiple 18
C OLE POLY TEC H NI QUE
F DRALE DE LAUSANNE
c EPFL 20022009
Jamila Sam
Classes virtuelles
Il peut se produire quune super-classe soit incluse plusieurs fois dans
une hirarchie hritage multiple :
Vivipare Ovipare
Ovovivipare
Animal Animal
Les attributs/mthodes de la super-classe seront inclus plusieurs fois !
Rvisions
Informatique II Cours 10 : H eritage multiple 28