Programmation Orienté Objet
en C++
Ricard
julien
jricard@liris.cnrs.fr
04.72.44.83.95
http://liris.cnrs.fr/julien.ricard/Organisation
Cours :
Rappels
Surchage de fonctions
Surcharge des opérateurs
Fonctions amies
Fonction Template
Fonction inline
TP : nombres rationnels
Programmation Orienté Objet en C++ 2Rappe
l
If
If ( condition ) { bloc si oui } else { bloc si non }
((condition)? Instruction_oui : instruction_non);
While
While ( condition ) { bloc executer tant que... }
For
For ( initialisation ; condition ; incrementation ) { bloc }
Do while
Do { bloc } while ( condition ) ;
Programmation Orienté Objet en C++ 3Conditions
booléenne
Et : & ou &&
Ou : | ou ||
Égalité : ==, <=, <, >=, >, !=
Penser aux () et aux commentaires…
(((a=0))||((a>b)&&(a<100000)))
& True False || True False
True True False True True True
False False False False True False
Programmation Orienté Objet en C++ 4Classe
class Date { Date::Date(){
_jour=0;
public : _mois_0;
int var1; _annee=0;
Date(); }
~Date(); Date::~Date(){}
void initialiser(int j,int m,int a);
void afficher(); void Data::afficher(){
int getJour(); cout << "la date : " << _jour ;
int getMois(); cout << "/" << _mois ;
int getAnnee(); cout << "/" << _annee << endl;
setJour( int j); }
setMois(int m);
setAnnee(int a); int Data::getJour() {return _jours;}
int Data::getMois() {return _mois;};
protected: int Data::getAnnee(){return _annee;}
int _jour;
int _mois; Data::setJour(int j) {_jour =j;}
int _ann ée; Data::setMois(int m) {_mois =m;}
void _test(); Data::setAnnee(int a){_annee=a;}
private:
};
Programmation Orienté Objet en C++ 5Réutilisabilité des
fonctions
Un bon module doit pouvoir :
Manipuler plusieurs types différentes
S’adapter au différentes structures de données
Offrir des opérations sans connaître l’implémentation
factoriser les opérations communes à un groupe de
module
Deux concepts
La surcharge
La généricité
Définition de nouvelles techniques:
Surchage des fonctions et des op érateurs
Fonction Template
Programmation Orienté Objet en C++ 6Surcharge
Attribuer le m ême noms à plusieurs op èrateurs ou
à plusieurs fonctions
L’ambiguité est levé par le contexte :
Nombre de parametres
Type des parametres
int max(int a,int b,int c);
int max(int a,int b);
float max(float a, float b, float c);
float max(float a, float b);
char max(char a, char b, char c);
char max(char a, char b);
Programmation Orienté Objet en C++ 7Exemple de surcharge de
fonctions
int max(int a,int b){
return ((a>b)? a : b);
}
float max(float a, float b){
int max(int a, int b, int c){}
if ((a>b)&&(a>c))char max(char a, char b){
return a; return ((a>b)? a : b);
if ((b>a)&&(b>c)) }
return b;
if((c>a)&&(c>b))
return c;
}
float max(float a, float b, float c){Class Point{
return max(max(a,b),c);Public:
} Point();
Point(int x,int y);
Private:
int _x;
int _y;
}
Programmation Orienté Objet en C++ 8Surcharge des
opérateurs
On peut surcharger les op érateurs :
+,, *, /, ++, =, ==, >, <, %, +=, = …
Cela permet :
SI A et B deux objets
Point A,B,C;A+B;
C=A+B;
C=AB;AB;
B=A;
A; C=(A*B);
If( B==A)…
if(A