La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

04.72.44.83.95 Programmation Orienté Objet en C++ Ricard julien.

Présentations similaires


Présentation au sujet: "04.72.44.83.95 Programmation Orienté Objet en C++ Ricard julien."— Transcription de la présentation:

1 jricard@liris.cnrs.fr 04.72.44.83.95 http://liris.cnrs.fr/julien.ricard/ Programmation Orienté Objet en C++ Ricard julien

2 Programmation Orienté Objet en C++ 2 Organisation Cours :  Rappels  Surchage de fonctions  Surcharge des opérateurs  Fonctions amies  Fonction Template  Fonction inline TP : nombres rationnels

3 Programmation Orienté Objet en C++ 3 Rappel 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 ) ;

4 Programmation Orienté Objet en C++ 4 Conditions booléenne Et : & ou && Ou : | ou || Égalité : ==, =, >, != Penser aux () et aux commentaires… (((a =0))||((a>b)&&(a<100000))) &TrueFalse True False ||TrueFalse True FalseTrueFalse

5 Programmation Orienté Objet en C++ 5 Classe class Date { public : int var1; Date(); ~Date(); void initialiser(int j,int m,int a); void afficher(); int getJour(); int getMois(); int getAnnee(); setJour( int j); setMois(int m); setAnnee(int a); protected: int _jour; int _mois; int _année; void _test(); private: }; Date::Date(){ _jour=0; _mois_0; _annee=0; } Date::~Date(){} void Data::afficher(){ cout << "la date : " << _jour ; cout << "/" << _mois ; cout << "/" << _annee << endl; } int Data::getJour() {return _jours;} int Data::getMois() {return _mois;}; int Data::getAnnee(){return _annee;} Data::setJour(int j) {_jour =j;} Data::setMois(int m) {_mois =m;} Data::setAnnee(int a){_annee=a;}

6 Programmation Orienté Objet en C++ 6 Ré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

7 Programmation Orienté Objet en C++ 7 Surcharge 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);

8 Programmation Orienté Objet en C++ 8 Class Point{ Public: Point(); Point(int x,int y); Private: int _x; int _y; } Exemple de surcharge de fonctions int max(int a,int b){ return ((a>b)? a : b); } float max(float a, float b){ return ((a>b)? a : b); } char max(char a, char b){ return ((a>b)? a : b); } int max(int a, int b, int c){ if ((a>b)&&(a>c)) return a; if ((b>a)&&(b>c)) return b; if((c>a)&&(c>b)) return c; } float max(float a, float b, float c){ return max(max(a,b),c); }

9 Programmation Orienté Objet en C++ 9 Surcharge des opérateurs On peut surcharger les opérateurs : +,-, *, /, ++, =, ==, >, <, %, +=, - = … Cela permet :  SI A et B deux objets  A+B;  A-B;  -A;  If( B==A)…  A=B;  A+=B;  … Point A,B,C; C=A+B; C=A-B; B=-A; C=-(A*B); if(A<B) C=B; else C=A;

10 Programmation Orienté Objet en C++ 10 Comment on fait ? Point addition(Point& A,Point& B){ Point C; C._x=A._x+B._x; C._y=A._y+B._y; return C; } Operateur + : A + B  C class Point{ public: Point addition(Point& B){ Point C; C._x=_x+B._x; C._y=_y+B._y; return C; } private: int _x; int _y; }; class Point{ public: Point operator+(const Point& p){ Point N; N._x=_x+p._x; N._y=_y+p._y; return N; } private: int _x; int _y; }; Int main() Point A,B,C; C=A+B; // C=A.operator+(B); }

11 Programmation Orienté Objet en C++ 11 Surcharge d’opérateurs class Vecteur{ public: int& operator[](int indice); operator=(Vecteur& V); private: int taille; int *tab; }; int& Vecteur::operator[](int indice){ return tab[indice]; } Vecteur::operator=(Vecteur& V){ delete [] tab; taille=V.taille; tab= new int [taille]; for(int i;i<taille;i++) tab[i]=V.tab[i]; }cc

12 Programmation Orienté Objet en C++ 12 Opérateur défini hors des classes Syntaxe opérationnel A+B Syntaxe fonctionnel A.operator+(B) Si A n’est pas un objet ? Exemple : 12*B A*12 Vecteur operator*(Vecteur& v,int nombre); Vecteur operator*(int nombre, Vecteur& v); Vecteur V(1,3); 12*V; // --> operator+(12,V);

13 Programmation Orienté Objet en C++ 13 Fonctions amies Donne l’acces aux membres privés et protegés à :  Une méthodes d’une autre classe  Toute les méthodes d’une autre classe  Une fonction Class A { friend void B::Ajouter(int); friend class B; friend A& operator*(int, A&); Private: int A; }

14 Programmation Orienté Objet en C++ 14 Surcharge de << Surcharge l’operateur << Affiche directement un objet complexe #include ’’iostream’’ ostream& operator<<(ostream& flot, Vecteur* V){ flot << V._x, << ’’ ’’ << V._y << endl; return flot ; } int main(){ Vecteur V(1,3); cout << V; return 0; }

15 Programmation Orienté Objet en C++ 15 Fonctions Template Générisité Fonctions Template cad générique Défini un patron de fonction Remplacé lors de la compilation int min(int a,int b){ return ((a<b)? a : b); } float min(float a, float b){ return ((a<b)? a : b); } char min(char a, char b){ return ((a<b)? a : b); } template T min ( T a, T b){ return ((a<b)? a : b ); } int main(int argc,char* argv[]){ cout << min( 12, 3)<< endl; cout << min( 12.4, 3.3)<< endl; cout << min('c', 'a')<< endl; cout << min( 12, 3.32324)<< endl; return 0; }

16 Programmation Orienté Objet en C++ 16 Exemple de template Template acceptant plusieur types de données Définition dans le fichier interface.H template T1 min ( T2 a, T3 b){ return ((a<b)? a : b ); } int main(int argc,char* argv[]){ cout << min( 12, 3.14116 )<< endl; cout << min( 12.4, ‘c’ )<< endl; return 0; }

17 Programmation Orienté Objet en C++ 17 Fonctions inline Fonctions sont couteuses en temps Fonction inline Fonction expansée à son point d’appel Ce n’est qu’un recommendation Définition dans le fichier interface.H inline min (int a, int b){ return ((a<b)? a : b ); } int main(int argc,char* argv[]){ cout << min( 12, 3) << endl; return 0; }

18 Programmation Orienté Objet en C++ 18 Valeur par défaut des parametres Définition dans.H int fonction(int a= 2, int b=4, int c=5, int d=10000); int fontion(int a,int b, int c){ … return 0; } int main(int argc,char* argv[]){ fonction(2,3,5 9000); fonction(2,3,5); fonction(2,3); fonction(2); fonction(); return 0; }


Télécharger ppt "04.72.44.83.95 Programmation Orienté Objet en C++ Ricard julien."

Présentations similaires


Annonces Google