Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Les fonctions A quoi ça sert ?
Programmation Orienté Objet en C++
Cours n° 7 Standard Template Library II.
Langages objet Définitions Traduction des méthodes en C++
(Classes prédéfinies – API Java)
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Paramètres et pointeurs
Leçon 3 : Héritage IUP 2 Génie Informatique
Chapitre III Héritage (début)
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Bibliothèque standard du C++
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Langage Oriente Objet Cours 2.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
1 Fonction : surcharge de sélection La surcharge de sélection consiste à implanter plusieurs méthodes de même nom dans une même classe à condition que.
C++ : fonctions et opérateurs
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Structures de données IFT-10541
Procédures et fonctions
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Structures de données IFT-2000
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Chapitre IX Gestion de flux.
Travaux Pratiques Représentation des connaissances
4 Introduction des objets. Les chaînes et tableaux
La notion de type revisitée en POO
Les adresses des fonctions
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
12/04/ Le polymorphisme Cours 8 Cours 8.
Cours C++ Fonctions Surcharge d’opérateurs Passage d’arguments
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Variables et environnement utilisateur W. Barhoumi.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Transcription de la présentation:

Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté

Leçon 2:Surcharge des opérateurs La surcharge Intérêt de la surcharge Règles de surcharge Opérateurs arithmétiques (classe vecteur) Opérateurs de redirection de flux Fonctions et classes amies

Méthode surchargée Le langage C++ permet la surcharge des méthodes, c’est à dire qu’il offre la possibilité d’implanter des méthodes ayant le même « nom ». La signature d ’une méthode regroupe son nom et le type de ses paramètres. Le type retour ne fait pas partie de la signature d ’une méthode.

Méthode surchargée : exemple Exemple d ’utilisation de la méthode : int i=power (2,3); double z=power(3.14,4); double z=power(2,3); Méthode power surchargée : int power (int x, int y); double power (double x, double y);

Méthode surchargée : résolution C’est la signature de la méthode qui permet au compilateur de sélectionner quelle méthode activer parmi celles surchargées. Les critères de sélection intervenant dans la résolution de surcharge sont : 1) La portée de la classe de l’instance qui déclenche l’appel. 2) Le nombre d’arguments dans l’appel. 3) La distance entre le type des arguments et celui des paramètres correspondant.

CLASSE VECTEUR On considère l ’objet : vecteur d ’entiers. Exemple : V = (2,5,1,4) V est un vecteur de 4 entiers. La dimension du vecteur a une valeur maximum égale à 10.

Classe vecteur : interface # include const int max=10; class vecteur{ public : vecteur(void); // constructeur vecteur (int t);// const et initialisation de la taille int getTaille(void); // Sélecteur => taille de IC void saisir (void); //saisie de IC void afficher(void);//Affichage de IC vecteur add (const vecteur&); // Est retourné : IC + argument void modifier(int i,int v); // T[i] <- v ~vecteur (void)// destructeur private : int taille; //nombre de cases réellement occupées int t[max]; //tableau de max entiers };

Classe vecteur : implantation int vecteur::getTaille(void){ return taille; } vecteur::vecteur(void){ taille=0; } vecteur::vecteur (int t){ taille = t; }

Classe vecteur : implantation void vecteur::saisir (void){ if (taille==0){ int ta; cout << "\n Taille du vecteur :"; cin >> ta; if (ta <= max) taille = ta; else taille=max;} for (int i=0; i<taille;i+=1){ cout<<"\n Valeur de l'élt No "<<i+1<< " : "; cin >> t[i]; } }

Classe vecteur : implantation void vecteur::afficher(void){ for (int i=0; i<taille;i+=1) { int no=i+1; cout <<"\n"<< no <<" : "; cout << t[i]; } }

Classe vecteur : implantation vecteur vecteur::add (const vecteur& v){ // IC + v vecteur somme; //appel du constructeur if (this->taille == v.taille){ somme.taille=this->taille; for (int i=0; i taille;i+=1){ somme.t[i]=this->t[i]+v.t[i]; } return (somme);//appel du construct par copie } void vecteur::modifier(int i,int v){ t[i]=v; }

SURCHARGE des OPERATEURS INTERÊTS : Facilité d’écriture Facilité de lecture Lisibilité BUT : Etendre la définition standard d ’un opérateur sur d’autres objets que ceux pour lesquels il est prédéfini. cout << V1+V2 # include"vecteur.h" void main (void) {vecteur V1 (6); vecteur V2 (6); cin >> V1>>V2;...

SURCHARGE des OPERATEURS Exemples : Opérations arithmétiques Opérateur << Opérateur >> Opérateurs de comparaison etc... # include"vecteur.h" void main (void) {vecteur V1 (6); vecteur V2 (6); cin >> V1>>V2;... cout << V1+V2

Règles Impossible de surcharger des opérateurs inconnus Impossible de modifier l ’arité des opérateurs (exemple :+ est binaire) Impossible de modifier les règles de priorité des opérateurs Impossible de redéfinir les opérateurs prédéfinis sur des types reconnus par l ’opérateur. Il faut respecter les règles syntaxiques prédéfinies

SURCHARGE de + Prototype retour operator symbole(paramètres) class X { public : X operator + (const X& B); // est retourné IC+B };

Surcharge de l ’opérateur + Toute méthode d ’une classe a un premier paramètre implicite représentant l ’instance courante. La surcharge d ’un opérateur par une fonction membre d ’une classe, implique donc que le premier paramètre représente l ’instance courante. Par conséquent l ’instance courante est toujours l ’opérande gauche des opérateurs binaires et l’unique opérande des opérateurs unaires. Appel de l ’opérateur (notation) : I1.operator + (I2); I1+I2;

Surcharge de l ’opérateur + # include class vecteur{ public : vecteur operator + (const vecteur& B); // est retourné : IC+B private : int taille; int t[max]; };

Surcharge de l ’opérateur + vecteur vecteur:: operator + (const vecteur& B) { vecteur somme; if (taille==B.taille) { somme.taille=taille; for (int i=0; i<taille;i+=1) somme.t[i]=t[i]+B.t[i]; } return somme; }

Surcharge des opérateurs >> et << Opérateur >> Constructeur Méthode La classe rectangle fournit des méthodes Une application # include # include "rectangle.h" void main (void) {rectangle R1,R2; } Opérateur << cin >> R1 >> R2; cout << R1 << R2;

# include # include "rectangle.h" void main (void) {rectangle R; cin >> R; cout << R;... Toute méthode est déclenchée par une instance Opérateurs de redirection de flux L ’instance cin de la classe istream déclenche l ’opérateur >> L ’instance cout de la classe ostream déclenche l ’opérateur <<

Problème d ’accessibilité Problème Pour écrire : cin >> R; il faut que la classe istream puisse accéder à la section private de la classe rectangle. Résolution Déclarer la méthode de surcharge de l ’opérateur >> comme fonction amie de la classe rectangle.

Méthode amie Mécanisme : Lorsqu ’une méthode externe à une classe C est déclarée amie dans la classe C, alors tous les membres de la classe C (y compris ceux de la section private ) sont accessibles par la fonction externe. Syntaxe : Qualificateur friend placé devant le prototype de la méthode externe à la classe.

CLASSE AMIE class X { public : friend class Y; private : }; EFFET Toutes les méthodes de la classe Y peuvent accéder à la section private de la classe X C ’est moi : classe X qui définit qui sont mes ami(e)s, et donc qui ouvre l ’accès de ma section private à l ’extérieur.

PROTOTYPE : opérateur >> class rectangle {public : friend istream& operator >> ( ???); Dans la classe istream l ’opérateur >> retourne une référence sur le flux Référence notée : istream&

PROTOTYPE : opérateur >> class rectangle {public : //IC est de type istream friend istream& operator>>( istream& f,rectangle& R); // longueur et largeur de R sont saisies Rectangle à saisir Afin de pouvoir enchaîner les appels : cin >> R1 >> R2; l ’opérateur retourne une référence sur le flux qu ’elle a reçu en premier argument Le premier argument est toujours une référence sur IC

IMPLANTATION : opérateur >> istream& operator>>(istream& flux,rectangle& R);{ if (taille==0){ int ta; cout << "\n Taille du vecteur :"; flux >> ta; if (ta <= max) taille = ta; else taille=max; } for (int i=0; i<taille;i+=1){ cout<<"\n Valeur de l'élt No "<<i+1<< " : "; flux >> t[i]; } return flux; }

CLASSE VECTEUR On considère l ’objet : vecteur d ’entiers. Exemple : V = (2,5,1,4) V est un vecteur de 4 entiers. La dimension du vecteur a une valeur maximum égale à 10. Exercice Coder une application permettant d ’exécuter la fonction main suivante # include <iostream.h> # include "vecteur.h" void main (void) { vecteur V(4); cin >> V; cout << V; }