Vous êtes sur la page 1sur 10

C++ classe (résumé)

 Une instance de classe peut être


 Static
 Dynamique
 Un pointeur sur l'instance courante : this
 Des constructeurs
 Pour initialiser les attributs
 Différentes formes
 Sans paramètre

 Avec paramètres

 Constructeur copie pour cloner un autre objet

Jean GUILLET Langage orienté objet C++ 1/10


C++ classe (résumé 2)
 Constructeurs suite :
 Une liste d'initialisation avant le corps du
constructeur
 Un destructeur unique
 Pour désallouer les zones mémoires
allouées avec new
 Déclaré comme le constructeur et précédé
de ~
 Appelé explicitement par delete ou pour
les instances statiques lorsqu'on quitte la
portée de la déclaration
Jean GUILLET Langage orienté objet C++ 2/10
Surcharge d'opérateur

 Les opérateurs sont définis pour les


types simples
 Ils peuvent être redéfinis pour
 Les types complexes tels que les classes
 Modifier le comportement de l'opérateur
Article unArticle; //
Article unAutreArticle;
unAutreArticle = unArticle;

Que doit réaliser la troisième ligne ?


Ce code est-il compilable ?

Jean GUILLET Langage orienté objet C++ 3/10


Surcharge d'opérateur (2)
 Syntaxe :
type_retour operator op(const type &) ;
par ex l'opérateur = de la classe Article
 Déclaration

Article& operator=(const Article &unArt);


 définition
Article& Article::operator=(const Article &unArt)
{...}

Commentez le code de l'opérateur surchargé =

Jean GUILLET Langage orienté objet C++ 4/10


Surcharge d'opérateur ex
Définissez l'opérateur de comparaison d'article (Question 28)
 Donnez le prototype de la surcharge
 Écrivez le code de la surcharge
correspondante
 Testez-la

Un opérateur surchargé est-il différent d'une méthode ?

Jean GUILLET Langage orienté objet C++ 5/10


Surcharge d'opérateur (3)
 Un opérateur surchargé pour une
classe :
 A son opérande de gauche du même type
que la classe
 Son opérande de droite passé en
paramètre est
 Constant
 Une référence
 Renvoie le type correspondant à
l'opérateur
Pourquoi l'opérande de droite est-il constant ?

Jean GUILLET Langage orienté objet C++ 6/10


Surcharge avec opérande de gauche de type
différent de la classe
 Vous disposez de la classe Article
 Nous voulons pouvoir calculer le prix

de n articles comme suit :


PrixTotal = unArticle * n;
PrixTotal = n * unArticle;
 Qui à partir d'une instance de la classe

Article noté unArticle affiche sur la


sortie le prix de n articles
 Avec n < quantite

Définir la ou les méthodes correspondantes.


Jean GUILLET Langage orienté objet C++ 7/10
Les fonctions amies

 Une fonction amie


 Est nécessaire lorsque la partie gauche
d'une méthode, d'un opérateur ne fait pas
partie de la classe où on veut l'utiliser
 Permet d'accéder à toutes les
caractéristiques de la classe en se
trouvant hors de la classe
 Fournit l'accès aux attributs privés,
publics à partir d'une autre classe

Jean GUILLET Langage orienté objet C++ 8/10


Fonctions amies
 Elle se définit comme une fonction
habituelle (fonction externe à la
classe)
 Elle se déclare à l'intérieure de la
classe où on veut l'utiliser avec le
mot clé friend
Réalisez maintenant le code permettant de calculer le
prix de n articles.
Peut-on avec ce code effectuer le calcul suivant :
PrixTotal = unArticle * n;

Répondez aux questions 29 et 30

Jean GUILLET Langage orienté objet C++ 9/10


Membres statiques d'une classe
 Ce sont des membres indépendants
des instances de la classe
 Précédés lors de la déclaration du mot
static
 Initialisé en dehors de la classe à l'aide de
l'opérateur ::
 Permet de connaître par exemple le
nombre d'instances d'une classe

Faites la question 31

Jean GUILLET Langage orienté objet C++ 10/10

Vous aimerez peut-être aussi