Rappel
La sance dernire
Notion de classe:
dclaration, dfinition et utilisation
Cration et destruction des objets
Constructeur et destructeur
Membre donne statique
Cette sance
Les fonctions amies
Lhritage
ZAKRANI / POO par C++ / 13-14
09/01/2016
Introduction
Introduction
Supposons par exemple que nous ayons dfini une classe
vecteur et une classe matrice.
Et nous souhaitons alors dfinir une fonction permettant
de calculer le produit dune matrice par un vecteur?
Pourrions nous dfinir cette fonction comme:
Fonction membre de la classe vecteur?
Fonction membre de la classe matrice?
Fonction indpendante?
09/01/2016
Introduction
Fonction membre de la classe vecteur?
Oui, nous pourrions ... mais
Une fonction membre de la classe vecteur ne pourra pas accder aux
donnes prives de la classe matrice
Fonction membre de la classe matrice?
Oui, nous pourrions ... mais
Une fonction membre de la classe matrice ne pourra pas accder aux
donnes prives de la classe vecteur
Fonction indpendante?
Oui, nous pourrions ... mais
Une fonction indpendante ne pourra pas accder ni aux donnes prives
de la classe vecteur ni aux donnes prives de la classe matrice
ZAKRANI / POO par C++ / 13-14
Introduction
09/01/2016
Situations damitis
Il existe plusieurs situations damitis :
09/01/2016
(-2,3)
(4,1)
Visibilit: privs
Dfinition de la
fonction amie
concide
10
09/01/2016
11
// partie publique
friend int B::f (char, A);
};
class B
{
Int f (char, A);
};
int B::f (char, A)
{ // on a accs ici aux membres
// privs de tout objet de type A
};
Fonction (f) dune classe (B), amie dune autre classe (A)
12
09/01/2016
// partie publique
friend void f (A, B);
};
Class B
{
// partie prive
// partie publique
friend void f (A, B);
};
13
// partie publique
friend class B ;
};
Cette dclaration
signifie que toutes les
fonctions membres de
la classe B sont amies
de la classe A.
14
09/01/2016
Exercice
Ecrire une fonction permettant de dterminer le produit
dun vecteur (objet de classe vect) par une matrice (objet
de classe matrice).
un constructeur pour vect et pour matrice ;
une fonction daffichage (affiche) pour matrice.
La fonction produit prod peut tre:
prod est indpendante et amie des deux classes vect
et matrice ;
prod est membre de matrice et amie de la classe
vect.
15
16
09/01/2016
17
Hritage Simple
18
09/01/2016
Hritage Simple
19
Notion dhritage
Point
- x: int
- y: int
+ initialise(int, int)
+ deplace(int, int)
+ affiche()
Pointcol
- couleur : short
+ colore(short)
20
10
09/01/2016
Exemple de programme
21
Non
void affichec ()
{ cout << "Je suis en " << x << " " << y << "\n" ;
cout << " et ma couleur est : " << couleur << "\n" ;
}
22
11
09/01/2016
De manire analogue:
void pointcol::initialisec (int abs, int ord, short cl)
{ initialise (abs, ord) ;
couleur = cl ;
}
ZAKRANI / POO par C++ / 13-14
23
24
12
09/01/2016
25
26
13
09/01/2016
class B: public A
{
public :
B()
~B()
....
};
27
28
14
09/01/2016
29
30
15
09/01/2016
Membres protgs
31
il devient possible de
dfinir, dans pointcol,
une fonction membre
affiche de la manire
suivante :
32
16
09/01/2016
Drivation publique
Accs un
Nouveau statut
utilisateur de la dans la classe
classe drive
drive, en cas de
nouvelle drivation
public
oui
oui
public
protg
oui
non
protg
priv
non
non
priv
33
Drivation prive
class point
{
public :
point();
void affiche();
void deplace();
};
};
34
17
09/01/2016
p.affiche ();
p.deplace (...) ;
p.point::affiche ();
p.point::deplace (...);
p.colore (...);
35
Hritage multiple
point
couleur
pointcoul
36
18
09/01/2016
class coul
{ short couleur;
public :
coul() {}
~coul() {}
void affiche() {}
};
37
arguments
transmettre
point
arguments
transmettre
coul
38
19
09/01/2016
void affiche ()
{ point::affiche () ;
}
void affiche ()
{ cout<<" Ma couleur : " <<couleur<<endl;
cout<<" Mes coordonees : " <<x<<" " <<y;
}
void affiche ()
{ point.affiche () ;
}
coul::affiche () ;
coul.affiche () ;
39
40
20
09/01/2016
41
Conflit ventuel
Considrons la situation suivante:
A
Quel est
le conflit
dans cette
situation?
correspondant des
dclarations telles que :
class A
{ .....
int x, y ;
};
class B : public A {.....} ;
class C : public A {.....} ;
class D : public B, public C
{ .....
};
ZAKRANI / POO par C++ / 13-14
42
21
09/01/2016
43
22