Chapitre 3 - Classes Et Objets
Chapitre 3 - Classes Et Objets
Chapitre 3 - Classes Et Objets
Objets
Chapitre 3
Classes et Objets
Plan
Structures
Classes
Constructeur & Destructeur
Objets dynamiques
Membres statiques
Surdéfinition des fonctions
Fonctions amies
Surcharge des opérateurs
Organisation du code
2011-2012 LST INFO, FSTF 3
Les structures
En C les structures contiennent uniquement des données
Exemple
Struct point {
int x;
int y;
};
Exemple
Point a, b;
a.x=10;
équivalent à a.initialise(10,20)
a.y=20;
2011-2012 LST INFO, FSTF 5
Les structures
Exemple
#include<iostream.h>
Using namaspace std; Int main()
struct point { int x; int y; {
void initialise(int,int); point a,b;
void deplace(int,int);
void affiche(); a.initialise (10,20);
}; a.affiche();
void point::initialise(int abs,int ord) a.deplace (5,5);
{ a.affiche();
x=abs;
y=ord; b.x=1;
} b.y=1;
void point::deplace(int dx,int dy)
b.affiche();
{
return 0;
x+=dx;
}
y+=dy;
}
void point::affiche()
{
cout << "position :" <<x <<"," <<y <<"\n";
}
2011-2012 LST INFO, FSTF 6
Notion de classe
Généralisation de la notion de type
Réunir données et traitement dans la même
entité
Exemple
class point {
int x;
int y;
public:
void initialise(int,int);
void deplace(int,int);
void affiche();
};
Private
– Seules les méthodes de la classe peuvent accéder
au membre "privé"
Exemple
class point {
private:
int x;
int y;
public:
void initialise(int,int);
void deplace(int,int);
void affiche();
private:
int calculer(int p);
};
Risque d’incohérence
class point {
int x;
int y;
public:
void initialise(int,int);
void deplace(int,int);
void affiche();
};
void point::affiche()
{
cout << "position :" <<x <<"," <<y <<"\n";
}
a.initialise (10,20);
a.affiche();
b=a;
b.affiche();
b.deplace(3,3);
b.affiche();
return 0;
}
a.initialise (10,20);
a.affiche();
b=a;
b.affiche();
Est facultatif
S’il n’est pas défini le compilateur génère un constructeur
par défaut
Syntaxe
nom_classe::nom_classe([param1,…]) {…}
Objets dynamiques
public:
point(int,int);
void deplace(int,int);
void affiche();
};
void point::affiche()
{
cout << "position :" <<x <<"," <<y <<"\n";
}
#include<iostream>
using namespace std;
class dvecteur {
int dim;
float *V;
public:
dvecteur(int,float*);
void decaler(float);
void afficher();
};
void dvecteur::decaler(float d)
{
void dvecteur::afficher()
{
for(int i=0;i<dim;i++) cout << V[i] <<" \n" ;
}
2011-2012 LST INFO, FSTF 32
Constructeur
Exemple: membres données dynamiques
int main()
{
float t1[]={1,1,1}, t2[]={2,2,2,2};
dvecteur V1(3,t1),V2(4,t2);
V2 = V1;
V2.afficher();
V1.decaler(5);
V2.afficher();
return 0;
}
Mamouni Mamouni
Mustapha Mustapha
C67965 C67965
Est facultatif
S’il n’est pas défini le compilateur génère un constructeur
par défaut
class point {
int x;
int y;
public:
point(int,int);
point(point&);
void deplace(int,int);
void affiche();
};
point::point(point &p)
{
x=p.x;
y=p.y;
}
void point::affiche()
{
cout << "position :" <<x <<"," <<y <<"\n";
}
void f(point p)
{
p.affiche();
}
point g()
{
point h(1,1);
return h;
}
2011-2012 LST INFO, FSTF 39
Constructeur de recopie
Exemple
Int main()
{
point a(10,20);
point c=a;
c.affiche();
c.deplace (5,5);
cout << "ici la fonction f" << endl;
f(c);
cout << "ici la fonction g" << endl;
c = g();
c.affiche();
return 0;
}
Risque d’incohérence
class dvecteur {
int dim;
float *V;
public:
dvecteur(int,float*);
dvecteur(dvecteur&);
void decaler(float);
void afficher();
};
class dvecteur {
int dim;
float *V;
public:
dvecteur(int,float*);
dvecteur(dvecteur&);
~dvecteur();
void decaler(float);
void afficher();
};
V1.afficher(); V1.decaler(d);
V1.afficher();
}
int main()
{
int d;
for(d=1;d<4;d++)
scenario(d);
return 0;
}
Int main()
{
int i ;
for (i=0;i <10; i++)
{
printf(" iteration = %d ", i);
fonct();
}
return 0;
}
2011-2012 LST INFO, FSTF 52
Classe Static et Classes
Exemple
Ob1 Ob2
10 20
15 30
10
Ob3
2011-2012 LST INFO, FSTF 55
Membres données Static
Exemple
#include<iostream.h> void point::deplace(int dx,int dy)
class point { {
static int nb; x+=dx;
int x; y+=dy;
int y; }
void point::affiche()
public: {
point(int,int); cout << "position :" <<x <<"," <<y
void deplace(int,int); <<"nombre d'objets" << nb <<"\n";
void affiche(); }
}; void main()
int point::nb=0; {
point a(10,20);
point::point(int abs,int ord) a.affiche();
{ a.deplace (5,5);
nb++; a.affiche();
x=abs; point b(30,30);
y=ord; b.affiche();
} }
2011-2012 LST INFO, FSTF 56
Fonctions membres static
Sont indépendantes de tous les objets
de la classe
nom_classe::fonct_static(…);
Syntaxe:
class nom_classe {
….
public:
…
static type fonct_static(….);
};
Remarque
Exemples
a+b a.somme(b)
a=b a.affectation(b)
++a a.incrementation()
Opérateurs arithmétiques
+-*/ %
Opérateurs d’incrémentation/décrémentation
++, --
Opérateurs de comparaison
< > >= <= == !=
Opérateur d’affectation
=
…
2011-2012 LST INFO, FSTF 73
Surcharge des opérateurs
Quelques opérateurs non surchargeables
. Opérateur pointeur vers un membre via objet
Fonction membre
L'opérateur
d'affectation est surchargé
comme une fonction membre.
void main()
{
personne p;
p.saisir("dupont","pascal",11111);
p.afficher();
}
class personne {
char nom[20];
char prenom[20];
int CIN;
public:
void saisir(char*,char*,int);
void afficher();
};
void main()
{
personne p;
p.saisir("dupont","pascal",11111);
p.afficher();
}