Bonjour,
Qu'est ce que le this ? et par quoi peut-il être remplacé ?
.....
Version imprimable
Bonjour,
Qu'est ce que le this ? et par quoi peut-il être remplacé ?
.....
Salut,
this désigne l'objet sur lequel la fonction (d'une classe, pas d'une fonction libre ou d'une fonction statique) est en train de s'exécuter :
Mais, vu la question, je pense que la meilleur réponse est ici.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class ma_classe { public : void ma_fonction(); }; void ma_classe::ma_fonction() { // this désigne l'objet sur lequel ma_fonction s'exécute } ma_classe m1; m1.ma_fonction(); // dans ma_fonction, this == &m1 ma_classe m2; m2.ma_fonction(); // dans ma_fonction, this == &m2
Curieuse question. Pourquoi vouloir le remplacer ?
Il est important de noter (ça se voit dans le code de 3DArchi, par exemple) que this est un pointeur. C'est donc un *pointeur* sur l'objet courant, dans une fonction membre. Tu ne peux pas le remplacer, il est et sera toujours là dans une fonction membre d'une classe.
..........
merci pour vos reponses.
aurevoir..:)...
Salut,
Une petite précision pour terminer.
Dans une fonction membre, l'appel à this est dit "implicite".
Cela signifie que tout ce qui s'exécute à l'intérieur d'une fonction membre s'exécute d'office sur this, s'il s'agit d'appeler une autre fonction membre ou d'accéder à un des membres de la classe.
Ainsi, si tu as une classe proche de
la fonction membre foo peut appeler bar ou accéder au membre le_membre aussi bien sous la forme deCode:
1
2
3
4
5
6
7
8 class MaClass { public: void foo(); void bar(); private: int le_membre; };
que sous la forme deCode:
1
2
3
4
5 void MaClass::foo() { bar(); le_membre = 15; }
(on préférera cependant bien souvent la première solution ;))Code:
1
2
3
4
5 void MaClass::foo() { this->bar(); this->le_membre *=2; }
Il y a quelques cas dans lesquels l'appel explicite à this est nécessaire, mais, si tu débute au point que le laisse penser la question, il sera toujours temps de t'en inquiéter lorsque tu envisagera d'utiliser la programmation générique ;)