 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
kanze@gabi-soft.fr Guest
|
Posted: Thu Apr 01, 2004 6:48 am Post subject: Re: Surchage Operateur + |
|
|
[email]cawaxs (AT) hotmail (DOT) com[/email] (JteStart) wrote in message
news:<4096ffa.0403310207.797c9fa5 (AT) posting (DOT) google.com>...
[...]
| Quote: | En faite j aimerais aussi savoir si cette affirmation est juste :
si je met "friend NbBase operator+(NbBase const& left, NbBase const&
right)" il y a 3 arguments
|
Non. Un « friend » n'est pas un membre. Il s'agit donc d'une fonction
libre avec deux paramètres : left et right.
| Quote: | mais si j en vais mis que 2 donc le "this" et "NbBase const& left"
alors il faut que le premier soit exactement de la meme classe cad
NbBase.
|
Il y a deux cas possibles : l'opérateur peut être une fonction membre
non-statique, ou il peut être une fonction libre. Dans le premier cas,
c'est l'objet passé comme this qui est l'opérand de gauche, et les
seules conversions explicites prises en comptes sont celles de dérivé
vers base. Le pointeur this compte comme un opérand -- un opérateur
binaire ne doit donc comporter qu'un seul paramètre déclaré, et un
opérateur unaire aucun. Si l'opérateur est une fonction libre, on
déclare tous ces opérands comme paramètres, et les conversions
habituelles des appels de fonction s'applique à tous les paramètres.
L'exemple classique de comment ça joue, c'est une classe Complex :
class Complex
{
public:
Complex( double r = 0.0, double i = 0.0 ) ;
Complex& operator+=( Complex const& right ) ;
// ...
} ;
Complex
operator+( Complex const& left, Complex const& right ) ;
Défini comme ça, et donnée un Complex z :
z += 1.0 ; // légal...
1.0 += z ; // illégal...
z = z + 1.0 ; // légal...
z = 1.0 + z ; // légal...
Si l'opérateur d'addition était un membre, il s'écrira :
Complex Complex::operator+( Complex const& right ) const ;
(avec un seul paramètre), et la dernière ligne ci-dessus serait
illégale.
| Quote: | Alors qu avec la solution friend cela permet d'utiliser une classe
derivee de NbBase ?
|
Attention, le « friend » n'y est pour rien. Tout ce que friend fait,
c'est de permettre à la fonction libre d'accéder à nos membres privés.
L'importance pour la légalité de la conversion, c'est que la fonction ne
soit pas membre ; c'est tout. Et comme tu peux voir de mes exemples, ce
n'est pas forcément nécessaire qu'il soit « friend » ; dans beaucoup de
cas, on peut très bien implémenter l'opération sans qu'il ait à accéder
aux membres non-publics. (Ceci dit : il vaut mieux le déclarer friend
que d'exposer des membres ou des fonctionalités exprès qui ne serait pas
autrement exposés.)
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
JteStart Guest
|
Posted: Thu Apr 01, 2004 12:40 pm Post subject: Re: Surchage Operateur + |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote in message news:<d6652001.0403312248.251e23f6 (AT) posting (DOT) google.com>...
| Quote: | cawaxs (AT) hotmail (DOT) com (JteStart) wrote in message
news:<4096ffa.0403310207.797c9fa5 (AT) posting (DOT) google.com>...
[...]
|
Merci beacoup. C'etais ce que je me demander. Je te remercie )
Bye
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|