PROB avec pointeur THIS

Résolu
jfk20004 Messages postés 39 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 13 novembre 2004 - 25 août 2004 à 10:16
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 25 août 2004 à 17:17
Salut,
tout ce que je sais à propos du pointeur this:
-c'est un pointeur sur l'adresse d'un objet
-il permet des appels en cascade de fonctions

quelqu'un peut il m'expliquer à quoi cela sert d'avoir
l'adresse d'un objet et ce qu'est reellement un appel en
cascade.
Si il y a une autre signification de this,merci de me la
donner.
Pouvez vous me donner un exemple d'utilisation.
MERCI bonne prog

4 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
25 août 2004 à 14:59
on vous demande une explication simple a prori, compliquez pas les choses, ou donnez des explications plus detaillées. mo quand je pose mes questions api, on me donne des reponses comme ca ca m'aide pas.
quand tu crées une classe, cette classe a des fonctions membres. parfois, une fonctions membre a besoin d'utiliser "l'objet lui meme". en fait, ton objet est constitué par ses données membres, mais parfois tu as besoin de dire "l'objet entier et non pas ses membres".par exemple, lorsque tu réécrie l'opérateur d'affectation, tu ne dois toujours vérifier que tu ne fais pas une autoaffectation (c'est a dire que dans ton programme tu ne fait pas obj obj, car ca fait planter), donc la premiere ligne de ton operateur doit verifier que l'adresse de ton objet est différente de l'adresse du parametre (pour etre plus clair voici le code, en reprenant l'exemple de djl qui etait bien) :

type operateur = (const type & obj)
{
if (this == &obj) return *this;

//recopie des membres:
membre1 += obj.membre1;
//ceci est equivalent a
//this->membre1 += obj.membre1;
membre2 += obj.membre2;

return *this;
}

voila j'espere qu'ainsi c'est plus clair.
et petit message a tout le monde, vous vous savez, ca vous semble evident, si on vous demande qqch, c'est que c'est obscur, donnez un bout de code clair expliqué clairement svp (je dis ca en esperant que ce soit ce que j'ai fait ici....du moins j'ai essayé)
3
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 août 2004 à 10:28
pour faire un appele en cascade, utile pour les expression avec operateur, il faut que l'operateur retourne l'adresse (une reference) sur l'objet
donc toujours return *this;
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 août 2004 à 11:12
pour bcp d'élements visuels (Win32 & MFC)
un pointeur sur l'objet parent ou celui a modifié est demandé

on fait alors svt appel à this

exemples : m_tooltip.Create(this);
pChoixDeveloppement->Create(IDD_DCHOIX_DEVELOPPEMENT,this);

Magic Nono: l'informagicien! 8-)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 août 2004 à 17:17
tu as entierement raison, le mieux c'est de lire la theorie et de s'entrainer à faire des bidouillage ou toujours faires des classes en exercices ...

this est l'adresse de l'hinstance, dans une fonction membre il est connue car c'est l'adresse de l'hinstance qui est en quelque sorte un parametre caché de ta fonction

par exemple

struct Foo
{
int a , b;

void bar()
{this->a 5; // identique à a 5
// car this represente l'adresse de
// l'hinstance sur laquel s'apliquera
// la fonction
b *(int *)this; // equivalent à b a

a = *(int *)(this + sizeof a); // equivalent à
// a = b;
}
};
ces exemples ne servent à rien et sont dangereux (d'ailleur je n'ai pas tester, me dire si ya erreur), à prendre uniquement pour exemple, autrement c'est un passe droit

en gros une fois que tu as compris que this est une adresse,tu peux appliquer tout ce tu connais de l'arithmetique des pointeurs/adresses en c
0
Rejoignez-nous