Vous êtes sur la page 1sur 10

09/01/2016

Programmation Oriente Objet


par C++
ZAKRANI Abdelali
ENSAM CASABLANCA
Anne universitaire 2014-2015

Rappel
La sance dernire
Fonctions (dclaration, transmission
par valeur/rfrence, argument par
dfaut)
Variables locales et globales
Surdfinition de fonctions
Structures: dclaration, initialisation et
utilisation

Cette sance
Les classes
Les objets
ZAKRANI / POO par C++ / 14-15

09/01/2016

Notion de classe

Une classe est la gnralisation de la notion de type


dfini par lutilisateur, dans lequel se trouvent associes
la fois des donnes (membres donnes) et des
mthodes (fonctions membres)
Une classe est une structure dans laquelle seulement
certains membres et/ou fonctions membres seront
publics, c..d. accessibles de lextrieur, les autres
membres tant dits privs.

ZAKRANI / POO par C++ / 14-15

Exemple de dclaration dune classe

Les champs x et y sont les membres donnes de la classe


point. Ils sont dclars privs. (private).
Les fonctions membres nommes initialise, deplace et
affiche sont publiques. (public)
ZAKRANI / POO par C++ / 14-15

Exemple dutilisation dune classe

09/01/2016

x et y membres donnes
de la classe point

Visibilit: privs

Trois fonctions membres


de la classe point

Visibilit:
publics

Dfinition de la fonction initialise


Dfinition de la fonction deplace
Dfinition de la
fonction affiche

ZAKRANI / POO par C++ / 14-15

Utilisation dune classe

En P.O.O., on dit que a et b sont des instances de la


classe point, ou encore que ce sont des objets de type
point.
Dans lexemple prcdent, tous les membres donnes de
point sont privs, ce qui correspond une encapsulation
complte des donnes.
Il existe un troisime mot, protected (protg), qui
sutilise de la mme manire que les deux autres ; il sert
dfinir un statut intermdiaire entre public et priv,
lequel nintervient que dans le cas de classes drives.

ZAKRANI / POO par C++ / 14-15

09/01/2016

Affectation dobjets
Soient les dclarations suivantes:
Comme cest le cas pour les
structures, on peut affecter
b les valeurs de a:
b=a;

Est-il possible de remplacer linstruction


b=a; par :
b.x = a.x ;
b.y = a.y ;
ZAKRANI / POO par C++ / 14-15

Notions de constructeur et de
destructeur

Un constructeur est une fonction membre (dfinie


comme les autres fonctions membres) qui sera
appele automatiquement chaque cration dun
objet.
Son rle est dinitialiser les donnes de lobjet cr.
Un objet pourra aussi possder un destructeur, cest-dire une fonction membre appele automatiquement
au moment de la destruction de lobjet.
Le constructeur porte le mme nom que la classe.
Le destructeur porte le mme nom que la classe,
prcd dun tilde (~).

ZAKRANI / POO par C++ / 14-15

09/01/2016

Exemple de classe comportant un


constructeur

La fonction initialise transform


en un constructeur en la
renommant point

Commet utiliser cette classe comportant un constructeur?


La dclaration point a; convient-elle toujours?
partir du moment o une classe possde un constructeur,
il nest plus possible de crer un objet sans fournir les
arguments requis par son constructeur (sauf si ce dernier ne
possde aucun argument !).

Dclaration:

point a(1,3) ; // correct


9

ZAKRANI / POO par C++ / 14-15

10

Exemple de classe comportant


un constructeur

ZAKRANI / POO par C++ / 14-15

09/01/2016

Construction et destruction des


objets

11

ZAKRANI / POO par C++ / 14-15

Les membres donnes statiques


Lorsque dans un mme programme on cre diffrents
objets dune mme classe, chaque objet possde ses
propres membres donnes.
Par exemple :

class exple1
{ int n ;
float x ;
.....
};

a.n

a.x

Une dclaration
telle que :
exple1 a, b ;

Objet a
b.n
b.x
Objet b

ZAKRANI / POO par C++ / 14-15

12

09/01/2016

Les membres donnes statiques

Une faon de permettre plusieurs objets de partager


des donnes consiste dclarer avec le qualificatif static
les membres donnes quon souhaite voir exister en un
seul exemplaire pour tous les objets de la
class exple1
{ static int n ;
float x ;
.....
};

Une dclaration
telle que :
exple1 a, b ;

a.n

a.x

b.n

Objet a

Objet b

b.x

On peut dire que les membres donnes statiques sont


des sortes de variables globales dont la porte est
limite la classe.
ZAKRANI / POO par C++ / 14-15

13

Exemple dune classe comportant


un membre donne statique

ZAKRANI / POO par C++ / 14-15

14

09/01/2016

1)

Ces deux dclarations sont-elles quivalentes?

struct point
{ int y ;
int x ;
void initialise (...) ;
....
};

2)

class point
{ public :
int y ;
int x ;
void initialise (...) ;
....
};

Cette dclaration est-elle correcte?


class
{ int y ;
int x ;
void initialise (...) ;
....
} c, d ;

ZAKRANI / POO par C++ / 14-15

15

Supposons que lon dfinisse une classe point disposant


dun constructeur sans argument.
Quelle est la manire correcte pour dclarer un objet:
point a;
point a();
point() a;
1)

2)

Comment expliquer le fait que la dclaration dun objet de


la classe point, par exemple, sans constructeur et avec un
constructeur sans argument sont pareilles?
point a;

ZAKRANI / POO par C++ / 14-15

16

09/01/2016

Exercice
Dterminants dun vecteur
Soient v1 et v2, deux vecteurs dfinis par leurs coordonnes (x,
y) et (x, y) extrmits, dans le plan euclidien orient usuel.
crivez un programme, construit autour dune classe vecteur,
dont les fonctions membres (mthodes) afficheront les 2
vecteurs v1 et v2, puis calculeront les dterminants det(v1,
v2) et det (v2, v1).
Les coordonnes extrmits des 2 vecteurs v1 et v2 seront
imposes.
Rsultat aprs excution:
v1 (x, y) = (2, 3)
v2 (x, y) = (2.5, 7)
det(v1, v2) = xy'- yx
det(v1, v2) = 6.5
det(v2, v1) = x'y - y'x
det(v2, v1) = -6.5
ZAKRANI / POO par C++ / 14-15

17

Solution
Dterminants dun vecteur
#include <iostream>
using namespace std;
//classe vecteur
class vecteur{
float x,y;
public:
// dclaration du constructeur
vecteur (float, float);
//fonction membre affiche et det
void affiche(int);
float det(vecteur);
};
ZAKRANI / POO par C++ / 14-15

18

09/01/2016

Solution (suite)

//dfinition du constructeur
vecteur::vecteur(float i=0, float j=0){
x=i;
y=j;
}
//dfinition de la fonction affiche
void vecteur::affiche(int i){
cout<<"v"<<i<<" (x, y) = ("<<x<<", <<y<<")"<<"\n\n";
}
//dfinition de la fonction det
float vecteur::det(vecteur w){
float determ;
determ=x*w.y-y*w.x;
return determ;
}

ZAKRANI / POO par C++ / 14-15

19

Solution (suite)

int main(){
//appel du constructeur vecteur, initialisation et
instanciation de v1 et v2
vecteur v1(2, 3), v2(2.5, 7);
//appel de la fonction affiche
v1.affiche(1);
v2.affiche(2);
//affichage des rsultats et appel de la fonction
det
cout<<"det(v1, v2) = xy- yx"<<endl;
cout <<"det(v1, v2) = "<<v1.det(v2)<<"\n\n";
cout<<"det(v2, v1) = xy - yx"<<endl;
cout <<"det(v2, v1) = "<<v2.det(v1)<<endl;
return 0;
}

ZAKRANI / POO par C++ / 14-15

20

10