PROB avec pointeur THIS [Résolu]

Signaler
Messages postés
39
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
13 novembre 2004
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
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é)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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;
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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-)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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