Petit source à expliciter

Signaler
Messages postés
44
Date d'inscription
vendredi 21 janvier 2005
Statut
Membre
Dernière intervention
22 mai 2006
-
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010
-
Voici un source dont j'aimerais avoir une explication :

class vecteur3d{
float v[3];

public:
vecteur3d(float c1=0,float c2=0,float c3=0){
v[0]=c1;
v[1]=c2;
v[2]=c3;
}
float&operator[](int);
};

float&vecteur3d::operator[](int i){
if(i<0||i>2)i=0;
return v[i];
}

On a surdéfinit l'opérateur [], et il renvoit float& afin de pouvoir exister en tant que lvalue. Ce que je ne comprends pas, c'est pourquoi return v[i] a-t-il comme type float& et pas plutôt float ? Et puisqu'on retourne un type float&, n'aurait-il-pas fallu écrire return v+i; ?

3 réponses

Messages postés
230
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
4 août 2005

float& => n'est pas un pointeur c une référence je crois, et tous les opérateurs
sur définis doivent retournés une référence et s'il avait mis return v+i il aurait
retourné un float*
une référence ca a tous les avantages des pointeurs sans les inconvénients
Voila j'espere t'avoir aidé meme si tt ce que je raconte n'est pas forcément vrai
(j'y connais pas grd chose sur le sujet)
Messages postés
368
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
27 janvier 2010
1
return v+i ça te renvoie l'adresse d'un pointeur !
en ce qui concerne le float& , justement c'est le renvoie d'une réference qui crée une valeur gauche .... si tu veux l'utiliser comme valeur droite tu mets un const float&


le C++ jusqu'à ce que la mort nous sépare !
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

En clair, tu peux écrire ca:
vecteur3d monvecteur;
monvecteur[0] = 3.5;