
Ce qui est très sympathique dans la programmation des objets, c'est que les méthodes de la classe accèdent directement aux attributs de l'objet sans spécifications supplémentaires. Malgré tout, la question se pose de savoir comment fait la méthode pour arriver à se connecter sur les attributs de l'objet désiré. En effet, chaque objet de la classe possède sa propre copie des attributs, afin que chacun puisse avoir sa propre identité pour que leur état puisse évoluer de façon différente. Par contre, le comportement demeure identique pour tous les objets de la classe. En effet, il n'existe qu'une seule copie de chaque méthode. Chaque méthode doit donc fonctionner pour tous les objets de la classe. Examinons le scénario suivant :

Effectivement, comment fait la méthode module pour reconnaître qu'elle est associée à l'objet « b » et ainsi qu'elle peut travailler directement avec les attributs de « b » ? En fait, chaque méthode d'une classe possède un pointeur implicite (donc non visible à priori) qui adresse l'objet pour lequel la fonction membre est appelée. Ce pointeur est appelé « this ». Son type dans une méthode est un pointeur vers le type de la classe. Ainsi « this » pour la classe « Complexe » aura pour type : « Complexe* ».
Dans les faits, le compilateur propose deux transformations pour incorporer ce pointeur afin de résoudre la connexion entre la méthode et les objets associés, à savoir :
Tout ce que nous venons de voir se fait implicitement, et généralement, nous n'avons pas besoin de faire référence au pointeur « this ». Toutefois, il existe des situations où son utilisation directe peut s'avérer intéressante.
Il est souvent très difficile de faire un choix judicieux quant au nom d'un paramètre. De plus, à l'heure actuelle, la plupart des environnements de développement intégré proposent des systèmes d'aides automatiques qui, dès que vous tapez le nom de la méthode, l'ensemble des paramètres attendus apparaissent avec leur type et leur nom. Dans ce cas là, il est judicieux de proposer des noms évocateurs pour que l'utilisateur sache ce que la méthode attend comme arguments.
En reprenant l'exemple du nombre complexe, j'avais d'abord choisi comme paramètres du constructeurs, respectivement, les noms x et y. Bien que nous comprenons à quoi cela correspond, cela reste imprécis. En effet, à la construction, le tout c'est de savoir si l'objet à besoin d'une partie réelle et d'une partie imaginaire. Il devient plus judicieux d'employer directement ces noms là. Du coup, la question qui vient immédiatement à l'esprit, c'est :
Est-ce qu'il ne va pas y avoir un conflit entre le nom du paramètre et son attribut équivalent ? La réponse est « non », chacun est dans une portée différente :
La difficulté, toutefois, c'est de pouvoir atteindre l'attribut. C'est à ce moment là que nous avons besoin de l'opérateur « this » puisque que c'est justement son rôle.

Lorsque nous faisons référence à un identificateur, c'est toujours la variable dont la portée est la plus locale qui est prise en compte. Lorsque nous évoquons ‘ imaginaire ', c'est donc une référence au paramètre de la méthode puisque sa portée est plus immédiate que la portée de la classe.
Imaginons une classe « Notes » qui permet de gérer un ensemble de notes d'élèves, pour qu'à la suite, il soit possible de calculer : la moyenne, la note la plus haute, etc. Cette classe est composée d'un tableau de notes ainsi qu'un autre attribut qui gère à chaque instant, le nombre de notes déjà introduites. C'est la méthode « ajout » qui s'occupe d'insérer les notes successivement. Voici un scénario possible :

Ce qui serait agréable, ce serait d'appeler plusieurs fois cette méthode « ajout », mais cette fois-ci, sur une seule ligne.


Attention : pour écrire de nouveau « ajout » après le séparateur « . », il est nécessaire d'avoir à gauche du séparateur, le type correspondant, c'est-à-dire, la classe « Notes », puisque cette méthode « ajout » n'existe que par rapport à cette classe. Il faut donc que cette méthode renvoie une référence vers sa propre classe (une référence permet de se connecter sans faire de copie). Finalement, dans la méthode « ajout », il faut employer un return et renvoyer l'objet dans lequel nous sommes. L'opérateur « this » est justement un pointeur vers l'objet sur lequel nous travaillons. Il est nécessaire de le déréférencer pour que l'on passe l'objet et non pas l'adresse de l'objet.