Documente Academic
Documente Profesional
Documente Cultură
- Arakil CHENTOUFI
- Fatima zahra ELFATRI LAMGHARI
Surcharge en C++
Dfinition:
Dfinition:
En C++ des fonctions diffrentes (mthodes comprises) peuvent avoir le mme nom, la condition que leurs signatures soient assez diffrentes. Lors de chaque appel, le nombre et les types des arguments effectifs permettent de choisir sans ambigut la fonction appeler.
Exemple :
int addition(int x, int n) { }
Exemple (suite) : Le programmeur n'aura connatre que le nom addition . Il crira dans tous les cas: c = addition( liste arguments); Le compilateur choisira la fonction la plus adapte, selon le nombre et le type des arguments effectifs.
Remarque :
Lutilisation de plusieurs mthodes de mme nom, chacune dans une classe nest pas une surcharge.
Les mthodes surcharges se trouvent toutes dans une mme classe.
Objectif :
Comme le constructeur est une mthode, on a le droit de le surcharger lui aussi. Cela permet de crer un objet de plusieurs faons diffrentes.
Exemple :
class point { int x, y ; public : point() { x = 0 ; y = 0; } point (int abs, int ord) { x = abs ; y = ord ; } void deplacer() { x = 0 ; y = 0; } void deplacer(int a, int b) { x += a ; y += b; }
};
Constructeur de copie
Dfinition :
Une mthode appel par le compilateur lorsqu'on construit un objet en lui affectant directement un autre objet. Son rle est de copier la valeur de tous les attributs du premier objet dans le second.
Constructeur de copie
Dfinition :
Le constructeur par copie d'une classe C est un constructeur dont le paramtre est de type Classe & (rfrence sur un objet de mme Classe) .
Constructeur de copie
Cas de gnration :
class Cercle { public: Cercle();
private: Float rayon;
};
Main() { Cercle C1; Cercle C2(C1); }
Constructeur de copie
Cas de gnration :
class Cercle
{
public: Cercle(); private: Float rayon; }; Main() { Cercle C1; Cercle C2 = C1; }
Constructeur de copie
Cas de gnration :
Constructeur de copie
Cas de gnration :
class Cercle
{
instructions }; void Dessiner(Cercle C1) { } Main() { Dessiner(C1); }
Constructeur de copie
Principe de fonctionnement :
Sil nest pas crit, il sera gnr automatiquement par le compilateur. Il copier la valeur de tous les attributs y compris les pointeurs (sils existent).
Dans ce cas, les 2 objets se retrouvent avec un mme pointeur sans que le compilateur ne puisse allouer de la mmoire doublement.
Constructeur de copie
Exemple :
class point { int x, y ; public : point() { x=0 ; y=0; } point (int abs, int ord) { x = abs ; y = ord ; } };
Constructeur de copie
Exemple :
class Cercle { public: Cercle(); Cercle(Cercle & ); ~Cercle(); private: Float rayon; Point *centre; }; // constructeur de copie
Constructeur de copie
Principe de fonctionnement :
Constructeur de copie
Principe de fonctionnement :
C1
Float rayon1
Point *centre1
C2
Float rayon1
Point *centre1
Point
Constructeur de copie
Principe de fonctionnement :
C1
Float rayon1
Point *centre1
C2
Float rayon1
Point *centre2
Point
Point
Constructeur de copie
Dfinition (implmentation) :
Cercle(Cercle & C)
{
Rayon = C.rayon; Centre = C.centre; // cest un pointeur }
Constructeur de copie
Dfinition (implmentation) :
Copier l'objet de type Point (centre) en faisant une allocation dynamique, donc un new. centre = new Point();
Constructeur de copie
Dfinition (implmentation) : Cercle(Cercle & C) { Rayon = C.rayon; // Centre = C.centre; Centre = new Point(); }
Constructeur de copie
Constructeur de copie
Dfinition (implmentation) :
Cercle(Cercle & C) { Rayon = C.rayon; // Centre = C.centre; // Centre = new Point(); // Centre = new Point(C.centre); Centre = new Point(*(C.centre)); }
Surcharge doprateurs
Dfinition:
Une technique qui permet de donner une nouvelle signification aux oprateurs existants lorsquils portent (en partie ou en totalit) sur des objets de type classe.
Surcharge doprateurs
Prototype: Crer la fonction operator+ en tant que: fonction amie: Friend Objet operator+(Objet & , Objet & ); fonction membre: Objet operator+(Objet & );
Surcharge doprateurs
Exemples :
fonction amie:
Surcharge doprateurs
Principe de fonctionnement :
Se limiter aux oprateurs existants, en conservant leur pluralit (unaire, binaire). Les oprateurs surchargs gardent leur priorit et leur associativit habituelle.
Surcharge doprateurs
Principe de fonctionnement :
La signification de += pour une classe ne peut en aucun cas tre dduite de la signification de + surcharg et de = surcharg pour cette mme classe.
Surcharge doprateurs
Principe de fonctionnement : resultat = duree1 + duree2; Est traduite par le compilateur : 1 cas: resultat = operator+(duree1, duree2);
Surcharge doprateurs
Exemples : Class Duree { int h; int min; int sec; Public: Duree() { h=0; min=0;sec=0; } Duree operator+(Duree & ); };
Surcharge doprateurs
Exemple :
Duree::Duree operator+(Duree & d) { Duree result; result.h=h+d.h; result.min=min+d.min; result.sec=sec+d.sec; return result; }
Surcharge de types
Dfinition :
Dfinition dune fonction membre, de nom operator nom_type ( ), sans argument et renvoyant une valeur de type nom_type .
Surcharge de types
Exemple :
class point { int x, y ; public : point (int abs=0, int ord=0) { x = abs ; y = ord ; } operator int () { return x ; };
Surcharge de types
Exemple (suite):
Surcharge de types
Exemple :
class Fract { int num; int den; public : operator double()
Surcharge de types
Exemple (suite) :
Surcharge
Exercice:
Soit une classe vecteur3d dfinie comme suit : class vecteur3d { float x, y, z ; public : vecteur3d (float c1=0.0, float c2=0.0, float c3=0.0) { x = c1 ; y = c2 ; z = c3 ; } }; Dfinir les oprateurs == et != de manire quils permettent de tester la concidence ou la non-concidence de deux points : a. en utilisant des fonctions membres; b. en utilisant des fonctions amies.
Surcharge de types
solution
class vecteur3d { float x, y, z ; public : vecteur3d (float c1=0.0, float c2=0.0, float c3=0.0) { x = c1 ; y = c2 ; z = c3 ; } int operator == (vecteur3d) ; int operator != (vecteur3d) ; } ; int vecteur3d::operator == (vecteur3d v) { if ( (v.x == x) && (v.y == y) && (v.z ==z) ) return 1 ; else return 0 ; } int vecteur3d::operator != (vecteur3d v) {return ! ( (*this) == v ) ; }