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...
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 :
Prenons l' exemple d'une classe Led[1] :
class Led{
private:
byte pin;
byte etat; // HIGH pour allumé, LOW pour éteint,
// quelque soit la valeur de montageInverse
bool montageInverse; // true si il faut LOW pour allumer !
void Rafraichir();
public:
Led(byte aPin, bool aMontageInverse = false); // constructeur complet
void Setup();
void Allumer();
void Eteindre();
};
et le code du constructeur :
Led(int pin){
pin = pin; // ???
pinMode(pin, OUTPUT);
etat = 0;
}
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 classeLed
. Une solution serait bien entendu de renommer l'un des deux mais le C++ offre une solution plus élégante : le mot clefthis
this
désigne le propriétaire de la méthode, on peut donc réécrire le constructeur précédent ainsi :
Led(int pin)
{
this->pin = pin;
pinMode(this->pin, OUTPUT);
etat = 0;
}
this->pin
désigne la variable membre de la classe Led
alors que pin désigne l'argument fourni au constructeur Led
Conseil : Bonne 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.