Petit source à expliciter

GIRAFE ENRHUMEE Messages postés 44 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 22 mai 2006 - 21 janv. 2005 à 02:55
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010 - 21 janv. 2005 à 11:00
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

asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
21 janv. 2005 à 07:25
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)
0
cs_AmK Messages postés 368 Date d'inscription jeudi 13 mars 2003 Statut Membre Dernière intervention 27 janvier 2010 1
21 janv. 2005 à 10:28
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 !
0
bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 janv. 2005 à 11:00
En clair, tu peux écrire ca:
vecteur3d monvecteur;
monvecteur[0] = 3.5;
0
Rejoignez-nous