Pointeur « this »

Définition

Le mot-clef this fait référence à l'objet dans lequel il est utilisé. En clair, lorsqu'on écrit, dans une fonction objet...

1
this->maVariable = 0;

... on indique clairement que l'on souhaite utiliser la variable maVariable déclarée dans la fonction objet en question. Si une autre variable maVariable a été déclaré à un niveau plus haut, dans le programme principal par exemple, elle ne sera pas utilisée.

Exemple

1
class Led{
2
private:
3
  byte pin;
4
  byte etat;  // HIGH pour allumé, LOW pour éteint,
5
              // quelque soit la valeur de montageInverse
6
  bool montageInverse; // true si il faut LOW pour allumer !
7
  void Rafraichir();
8
 
9
public:
10
  Led(byte aPin, bool aMontageInverse = false);  // constructeur complet
11
  void Setup();
12
  void Allumer();
13
  void Eteindre();
14
};

et le code du constructeur :

1
Led(int pin){
2
	pin = pin; // ???
3
  pinMode(pin, OUTPUT);
4
  etat = 0;
5
}
  • Il y a un problème avec la variable pin puisque c'est à la fois l'argument fourni à la fonction et une variable membre de la classe Led. Une solution serait bien entendu de renommer l'un des deux mais le C++ offre une solution plus élégante : le mot clef this

  • this désigne le propriétaire de la méthode, on peut donc réécrire le constructeur précédent ainsi :

1
    Led(int pin)
2
    {
3
      this->pin = pin;
4
      pinMode(this->pin, OUTPUT);
5
      etat = 0;
6
    }

this->pin désigne la variable membre de la classe Led alors que pin désigne l'argument fourni au constructeur Led

ConseilBonne pratique

Il est conseillé d'utiliser this lorsqu'il s'agit d'éléments de la classe même si il n'y a pas d’ambiguïté : cela assurera une meilleur lisibilité du programme et permet de se prémunir du risque d'erreur future.