Académique Documents
Professionnel Documents
Culture Documents
objets - séances 8 et 9 -
ENSA Khouribga
Décembre 2021
Fonctions et classes amies
Fonctions amies
Il existe un autre moyen pour une fonction quelconque
d’accéder aux membres privés d’une classe. Il s’agit d’une
fonction amie (friend).
Celle-ci se déclare dans le corps de la classe, précédée du mot
clé friend.
Elle accède aux attributs privés sans l’utilisation des getters
ou des setters.
class MaClasse { . . .
// fonction amie et non une methode
friend type - ret Fonct ( ... );
};
/* ici on definie la fonction fonct ()
sans operateur de portee */
class MaClasse { . . .
// declaration de la classe amie
friend class TaClasse ;
};
Motivations (suite)
En C++, les opérateurs définis pour les types de base sont
traités par le compilateur comme des fonctions, ce qui permet
donc, avec la technique de la surcharge, d’utiliser la plus part
d’entre eux avec les types classe.
Les opérateurs surchargeables sont :
Exemple :
class Point{ . . .
/*déclaration de la surcharge de l’opérateur + en tant que
méthode de classe*/
Point operator +(Point ) ;
/*déclaration de la surcharge de l’opérateur - en tant que
fonction amie */
friend Point operator -(Point, Point) ;
};
Prof. Karim Rhofir C++ & POO
Surcharge d’opérateurs
Surcharge d’opérateurs
La surcharge d’opérateurs ne peut pas avoir des arguments par
défaut et doit conserver la pluralité (unaire, binaire) de
l’opérateur initial :
Opérateurs unaires :+, -, ++, –, , *, new, delete, ( ),. . .
Opérateurs binaires : *, +, -, «, »,<, <=, >, >=,[],. . .
Il y a des opérateurs qu’on ne peut pas surcharger : .,
sizeof,. . .
Les opérateurs =,[], (), ->, new et delete doivent être
redéfinis comme méthode de classe (et non comme fonctions
amies).
L’ordre de priorité des opérateur est conservé.
Il n’est pas possible de créer de nouveaux opérateurs.
Exemple :
class Point{
/*déclaration de la surcharge de l’opérateur + en tant que
fonction amie */
friend Point operator +(Point, Point) ; } ;
déclarer l’amitié dans la classe Point
définir la fonction globale amie à lextérieur de la classe
Exemple :
Exemple :
class Point{
/*déclaration du protoype de la surcharge de l’opérateur +
en tant que méthode */
Point operator+( Point) ; } ;
Point Point : :operator+(Point P). . .
Exemple :
Remarque :
Il y a une différences entre l’implémentation du constructeur par
recopie et celle de la surcharge de l’opérateur = :
affectation d’un objet à lui-même possible,
avant l’affectation : les 2 objets existent, (déjà construits).
return * this ;
}
else return * this ;
}
// l utilisation
int main (){
Point pt (10 ,3) ;
double f ;
f = ( double ) pt ;
// ou double ( pt );( ecriture fonctionnelle )