 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Michaël Delva Guest
|
Posted: Thu Jul 08, 2004 12:03 pm Post subject: Pointeurs sur fonctions |
|
|
Bonjour à tous,
j'ai quelques questions concernant les pointeurs:
j'ai la classe suivante:
struct Indexation_Equipe
{
AnsiString nom_equipe;
std::vector<Indexation_Joueur> liste_joueurs;
unsigned int index_equipe;
unsigned int score;
Indexation_Action action_debut,
action_fin;
bool sens_terrain;
bool operator==(const Indexation_Equipe & compar) const;
AnsiString __fastcall Get_Joueurs_En_Jeu();
};
Indexation_Equipe equipe_domicile,
equipe_exterieur;
J'utilise ensuite les pointeurs suivants:
Indexation_Equipe * equipe_attaque,
* equipe_defense,
* equipe_choisie,
* equipe_pas_choisie;
Pour affecter un pointeur, je fais par exemple equipe_attaque =
&equipe_domicile.
Mais il arrive que je doive faire equipe_attaque = equipe_choisie; ou
l'inverse.
Est-ce qu'il faut que j'ajoute un operateur d'affectation par copie, ou
bien comme ça c'est bon?
Sinon, pour être sûr:
Quand je fais equipe_choisie = equipe_attaque;, lorsque je modifie des
membres de equipe_choisie, est-ce que les changements se répercutent sur
equipe_attaque, puis sur equipe_domicile?
Même chose lorsque je modifie equipe_attaque, est-ce que equipe_choisie est
modifié également?
Je pense que c'est tout...
Merci d'avance
Mike
|
|
| Back to top |
|
 |
drkm Guest
|
Posted: Thu Jul 08, 2004 1:07 pm Post subject: Re: Pointeurs sur fonctions |
|
|
"Michaël Delva" <michael_delva (AT) i_cant_remember (DOT) com> writes:
| Quote: | Bonjour à tous,
j'ai quelques questions concernant les pointeurs:
|
Et pas les pointeurs sur fonction, comme le laisse supposer le sujet
de ton article.
| Quote: | j'ai la classe suivante:
struct Indexation_Equipe
{
AnsiString nom_equipe;
|
As-tu réellement besoin d'AnsiString dans cette classe ?
S'il s'agit d'une classe métier, je conseillerais plutôt l'emploit
de std::string, avec conversions aux endroits qui vont bien. Du moins
si je ne me trompe pas et qu'AnsiString est bien une classe de chez
Borland, liée à leurs classes graphiques. Mais il est vrai que je
n'ai pas toutes les données.
| Quote: | std::vector<Indexation_Joueur> liste_joueurs;
unsigned int index_equipe;
unsigned int score;
Indexation_Action action_debut,
action_fin;
bool sens_terrain;
bool operator==(const Indexation_Equipe & compar) const;
AnsiString __fastcall Get_Joueurs_En_Jeu();
|
C'est quoi, ce « __fastcall » ? C'est bizarre, je l'ai souvent vu
sur f.c.l.c++, mais la plupart du temps par des gens ne semblant pas
maîtriser le C++. Il me donne un peu l'impression de « inline », que
beaucoup de débutants utilisent à tout-va, et prématurément. Es-tu
sûr d'en avoir besoin, et surtout d'en comprendre toutes les
implications ?
Pourquoi utilises-tu une structure ? Je veux dire par là des champs
publiques. D'après les noms de tes champs, et les relations que
j'imagine entre eux, cela est une grave erreur de conception. Mais
encore une fois je n'ai pas toute les données (bien qu'ici je vois mal
comment justifier cela).
| Quote: | Indexation_Equipe equipe_domicile,
equipe_exterieur;
|
Tu as donc deux objets.
| Quote: | J'utilise ensuite les pointeurs suivants:
Indexation_Equipe * equipe_attaque,
* equipe_defense,
* equipe_choisie,
* equipe_pas_choisie;
|
Et quatre pointeurs. Mais toujours que deux objets.
| Quote: | Pour affecter un pointeur, je fais par exemple equipe_attaque =
&equipe_domicile.
|
Ok. Tu donnes l'adresse d'un objet comme valeur d'un pointeur.
| Quote: | Mais il arrive que je doive faire equipe_attaque = equipe_choisie; ou
l'inverse.
|
Ok. Tu donnes la valeur d'un pointeur comme valeur d'un autre
pointeur.
| Quote: | Est-ce qu'il faut que j'ajoute un operateur d'affectation par copie, ou
bien comme ça c'est bon?
|
Tu ne fais que copier des adresses. Tu ne copies pas d'objets.
| Quote: | Sinon, pour être sûr:
Quand je fais equipe_choisie = equipe_attaque;, lorsque je modifie des
membres de equipe_choisie, est-ce que les changements se répercutentsur
equipe_attaque, puis sur equipe_domicile?
Même chose lorsque je modifie equipe_attaque, est-ce que equipe_choisie est
modifié également?
|
Non. Du moins pas comme tu l'as dit.
{
C c ;
C * p1 = & c ;
C * p2 = p1 ;
}
p1 et p2 ont la même valeur, qui est l'adresse de l'objet c. Si l'on
modifie l'objet pointé par p1, cela ne modifie pas p2 (sa valeur est
toujours la même adresse). Mais comme p1 et p2 pointent vers le même
objet, accéder à cet objet par l'un ou l'autre prend en compte les
modifications.
Mais ce n'est pas les pointeurs alors que l'on modifie, c'est
l'objet pointé par ces pointeurs. C'est la différence entre ces deux
instructions :
* p1 = ... ; // On modifie l'objet pointé.
p2 = ... ; // On modifie le pointeur.
| Quote: | Je pense que c'est tout...
Merci d'avance
|
--drkm
|
|
| Back to top |
|
 |
Alexandre Guest
|
Posted: Thu Jul 08, 2004 4:31 pm Post subject: Re: Pointeurs sur fonctions |
|
|
bonjour,
| Quote: |
Indexation_Equipe * equipe_attaque,
* equipe_defense,
* equipe_choisie,
* equipe_pas_choisie;
|
premier conseil : tu possèdes une variable "equipe_domicile" qui est une
valeur, et une autre "equipe_attaque" qui est un pointeur. Je te garantis
qu'un jour ou l'autre, tu vas te planter ! préfixes tes variables pointeurs
(par ex ptr_equipe_attaque ou plus court pEquipAtt) pour identifier
clairement tes pointeurs.
| Quote: | Pour affecter un pointeur, je fais par exemple equipe_attaque =
&equipe_domicile.
|
Ok, si ce que tu veux est désigner par une autre manière (une sorte d'alias,
de raccourci si tu préfères) l'objet "equipe_domicile"
| Quote: |
Mais il arrive que je doive faire equipe_attaque = equipe_choisie; ou
l'inverse.
|
c'est possible, mais attention : ça ne modifie pas le CONTENU de l'objet,
mais uniquement l'adresse du pointeur. Mélange de pinceaux garantis.
| Quote: |
Est-ce qu'il faut que j'ajoute un operateur d'affectation par copie, ou
bien comme ça c'est bon?
|
ça dépend ce que tu veux faire...
| Quote: |
Sinon, pour être sûr:
Quand je fais equipe_choisie = equipe_attaque;, lorsque je modifie des
membres de equipe_choisie, est-ce que les changements se répercutent sur
equipe_attaque, puis sur equipe_domicile?
|
Attention au vocabulaire : "equipe_choisie" étant un pointeur, il n'A PAS de
membres : c'est (*equipe_choisie) qui en a... Et c'est LE MEME objet que
equipe_domicile... Si tu fais equipe_choisie->Membre1 = 0, alors
equipe_domicile.Membre1 vaudra 0...
| Quote: | Même chose lorsque je modifie equipe_attaque, est-ce que equipe_choisie
est
modifié également?
|
encore une confusion entre adresse et valeur... Bien sur que tu ne modifies
PAS equipe_choisie (qui n'est qu'une adresse) mais l'objet POINTE par
equipe_choisie, qui est LE MEME que l'objet pointé par equipe_attaque, est
modifié en même temps.
| Quote: |
Je pense que c'est tout...
|
un dernier conseil : reflechis bien sur la nature d'un pointeur.... Parce
qu'il me semble que c'est un peu confus...
Bonne chance
| Quote: |
Merci d'avance
Mike
|
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jul 08, 2004 4:36 pm Post subject: Re: Pointeurs sur fonctions |
|
|
On Thu, 8 Jul 2004 18:31:11 +0200, "Alexandre"
<alex.g (AT) netcourrier (DOT) com>:
| Quote: | ou plus court pEquipAtt
|
NOOOOOOOOOOOOOOOOOOOOOON ! Pitié ! Pas ça !
Si tu tiens vraiment à rendre ton code illisible, autant passer tous
tes noms de variables au ROT-13, ça ira plus vite.
Si tu veux garder un code lisible, utilise des noms de variables
explicites.
Le moindre PC vendu actuellement a au moins 120 Go de disque dur.
Inutile donc de tenter de grapiller quelques octets en triplant le
temps de lecture du code.
--
schtroumpf schtroumpf
Jean-Emile de France
|
|
| Back to top |
|
 |
Arnaud Debaene Guest
|
Posted: Thu Jul 08, 2004 6:15 pm Post subject: Re: Pointeurs sur fonctions |
|
|
Fabien LE LEZ wrote:
| Quote: | On Thu, 8 Jul 2004 18:31:11 +0200, "Alexandre"
[email]alex.g (AT) netcourrier (DOT) com[/email]>:
ou plus court pEquipAtt
NOOOOOOOOOOOOOOOOOOOOOON ! Pitié ! Pas ça !
Si tu tiens vraiment à rendre ton code illisible, autant passer tous
tes noms de variables au ROT-13, ça ira plus vite.
Si tu veux garder un code lisible, utilise des noms de variables
explicites.
Le moindre PC vendu actuellement a au moins 120 Go de disque dur.
Inutile donc de tenter de grapiller quelques octets en triplant le
temps de lecture du code.
|
Mais qu'est ce que tu racontes? On peut gloser at nauseam sur les faits et
méfaits de telle ou telle convention de nommage des variables (on la fait
régulièrement ici sans faire avancer le débat d'un iota d'ailleurs ,
mais en quoi la notation hongroise est-elle censée économiser l'espace
disque, comme tu semble le dire et le dénoncer ?
Arnaud
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jul 08, 2004 6:32 pm Post subject: Re: Pointeurs sur fonctions |
|
|
On Thu, 8 Jul 2004 20:15:59 +0200, "Arnaud Debaene"
<adebaene (AT) club-internet (DOT) fr>:
| Quote: | mais en quoi la notation hongroise est-elle censée économiser l'espace
disque
|
Je ne parle pas de la notation hongroise.
Le morceau de message auquel j'ai répondu, et que j'ai donc cité, est
"ou plus court pEquipAtt".
--
schtroumpf schtroumpf
Jean-Emile de France
|
|
| Back to top |
|
 |
Michaël Delva Guest
|
Posted: Thu Jul 08, 2004 10:42 pm Post subject: Re: Pointeurs sur fonctions |
|
|
| Quote: | Est-ce qu'il faut que j'ajoute un operateur d'affectation par copie, ou
bien comme ça c'est bon?
ça dépend ce que tu veux faire...
|
Dans quels cas utilise-t-on alors un operateur d'affectation? J'ai cru
comprendre que c'était lorsque l'objet possède des membres pointeurs...
Mais comme là je change l'adresse du pointeur, j'ai pas besoin de ça, j'ai
bon?
| Quote: | un dernier conseil : reflechis bien sur la nature d'un pointeur....
Parce qu'il me semble que c'est un peu confus...
Bonne chance
Merci d'avance
Mike
|
Après avoir posté ma question, j'ai fait quelques tests pour être sûr de ce
que je faisais, et il s'avère que ce que j'ai fait correspond bien à ce que
je voulais au départ, à savoir utiliser comme tu l'as dit des alias aux
variables equipe_domicile et equipe_exterieur...
Et je m'étais également rendu compte qu'utiliser equipe_choisie ou
equipe_attaque modifiait bien en fait l'objet pointé, à savoir
equipe_domicile ou equipe_exterieur...
Merci de ta réponse...
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jul 08, 2004 11:26 pm Post subject: Re: Pointeurs sur fonctions |
|
|
On 08 Jul 2004 22:42:44 GMT, "Michaël Delva"
<michael_delva (AT) i_cant_remember (DOT) com>:
| Quote: | Dans quels cas utilise-t-on alors un operateur d'affectation?
|
Quand l'opérateur généré par le compilateur ne fait pas ce qu'on veut.
--
schtroumpf schtroumpf
Jean-Emile de France
|
|
| Back to top |
|
 |
Michaël Delva Guest
|
Posted: Thu Jul 08, 2004 11:35 pm Post subject: Re: Pointeurs sur fonctions |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote in
news:svlre09p3pst92kvj873v82b790inqudhq (AT) 4ax (DOT) com:
| Quote: | On 08 Jul 2004 22:42:44 GMT, "Michaël Delva"
[email]michael_delva (AT) i_cant_remember (DOT) com[/email]>:
Dans quels cas utilise-t-on alors un operateur d'affectation?
Quand l'opérateur généré par le compilateur ne fait pas ce qu'on veut.
|
OK, merci...
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|