next up previous contents
Next: Héritage et les initialisation Up: Références Previous: Éviter la recopie :

Retourner une référence

De façon plus originale, on peut aussi retourner une référence, ainsi l'appel de fonction peut se trouver en membre gauche d'une affectation...:

class tableau{
#define TAILLE_DEF 16
public:
  int & operator[](int i){
    assert(i<taille);
    return t[i];
  }
  tableau(int i=TAILLE_DEF){
    t=new int[taille=i];
  }
    
//...
private:
  int *t;
  int taille;
};
main(){
  tableau t;
  t[4]=9;                    //t[4] l-value
  cout<< "t[4]="<<t[4]<<endl;//t[4] r-value
}
Mais dans cet exemple, on ne pourra appeler l'opérateur int & operator[](int i) avec une constante de type tableau, pour résoudre ce problème on peut ``surcharger'' cet opérateur pour les constantes :
class tableau{
#define TAILLE_DEF 16
public:
  int & operator[](int i){
    assert(i<taille);
    return t[i];
  }
  int operator[](int i) const{
    assert(i<taille);
    return t[i];
  }
// ...
}

Il faut bien sûr faire attention à ne pas retourner une référence d'un objet local...



Mon Oct 20 14:02:48 MET 1997