Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2600 connectés 

 


Dernière réponse
Sujet : Retourner un objet en C++
El_gringo

darkoli a écrit a écrit :

 
 
question de gouts en fait. Mois je prefere les pointeurs




 
Moi aussi, gloire aux pointeurs :hot:  :bounce:


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
El_gringo

darkoli a écrit a écrit :

 
 
question de gouts en fait. Mois je prefere les pointeurs




 
Moi aussi, gloire aux pointeurs :hot:  :bounce:

BENB

Verdoux a écrit a écrit :

J'ai pas dit qu'il fallait mettre des const character& dans le cas présent !
En fait surtout pas puisque les objets sont modifiés.
 
Je repondais simplement à BENB sur un point de style.
Elle préconise l'utilisation de références quand la fonction ne modifie pas les arguments et de pointeurs autrement alors que d'autres mettent des reférences partout selon la formule "Use references when you can, and pointers when you have to".
 
 




En effet, syle, philosophie et maintenance...
les references ont ete faites pour le cas present, et la solution avec des references marche aussi bien (ou aussi mal) que celle avec les pointeurs...
Certains ont peur des pointeurs ou preferent les references
Pour ma part je preconise les pointeurs car a la relecture l'appel Attack(&hero,&Creature); me semble plus parlant que Attack(hero,creature); et un point c'est tout.
 
Verdoux me repondait que dans le prototype il n'y avait pas ce probleme car si on code correctement on mets un const devant une reference que l'on ne compte pas modifier (passage par reference plus rapide), ce que l'on peut faire avec un pointeur egalement.
 
Ma preconisation est donc reference pour une acceleration du passage d'arguement (avec un const donc) et un pointeur qund on modifie la valeur dans la fonction. le but eatnt de faciliter la relecture... et donc la maintenance. Je ne suis toutefois pas a l'orgine de cette preconisation puisque c'est celle de B.Stroustrup (et comme je la trouve bien je la reprend...)
 
Quant a El_gringo, je prefere ne meme pas lire ce qu'il propose... Il a de la chance de ne pas faire partie de mon equipe :D...

darkoli

tgrx a écrit a écrit :

airbg> les references c'est plus joli que les pointeurs...
 
void attack(Character& src, Character& dest)




 
question de gouts en fait. Mois je prefere les pointeurs

haahhahahaha pointeur ou reference ?
chacun ces gouts et c tout. chacun a ses manieres de coder.
perso, je prend les references kqn je pointe sur un seul objet.
les pointeurs, c kan l'objet sur lekel il pointe change.
 
jsais pas si vous comprener mais bon...
verdoux J'ai pas dit qu'il fallait mettre des const character& dans le cas présent !
En fait surtout pas puisque les objets sont modifiés.
 
Je repondais simplement à BENB sur un point de style.
Elle préconise l'utilisation de références quand la fonction ne modifie pas les arguments et de pointeurs autrement alors que d'autres mettent des reférences partout selon la formule "Use references when you can, and pointers when you have to".

 

[edit]--Message édité par Verdoux--[/edit]

El_gringo ouais, mais ce que fait Verdoux avec ses const Character& src et l'autre truc, c qu'il passe l'adresse de du membre src, et ça y faut pas le modifier !
ç à dire que dans ta fonction, comme il l'a écrit, src est une adresse...
tu peux donc par exemple la récupérer dans un pointeur sur ton membre src.
 
si tu passe en arguement de ta fonction  
const Character& _addresseSrc et const Character& _adresseDest
 
tu pourras récupérer à l'intérieur de ta fonction cette adresse dans un pointeur si tu connais plus les pointeurs (moi je préfère, c + clair !), en faisant:
Character* src, dest;
src  = _adresseSrc;
dest = _adresseDest;
BENB

Verdoux a écrit a écrit :

 
Pas forcément. Parce que si les objets ne sont pas modifiés, on aura tendance à mettre des "const" pour le souligner:
void attack(const Character& src, const Character& dest)  
 
Et l'absence de "const" renseigne sur la possible modification de l'objet.




 
Je parle de la relecture de l'appel, pas de la relecture du prototype...
 
Chacun fais comme il veux, je donne mon avis. Mais je ne suis pas la seule, voir BS...

bkadoum

Verdoux a écrit a écrit :

 
Pas forcément. Parce que si les objets ne sont pas modifiés, on aura tendance à mettre des "const" pour le souligner:
void attack(const Character& src, const Character& dest)  
 
Et l'absence de "const" renseigne sur la possible modification de l'objet.




 
mais moi je veux modifier les attributs de mes objets

verdoux

BENB a écrit a écrit :

 
NON, plutot les pointeurs comme ca on voit que attack peut modifier src et dest quand on relit, sinon...




Pas forcément. Parce que si les objets ne sont pas modifiés, on aura tendance à mettre des "const" pour le souligner:
void attack(const Character& src, const Character& dest)  
 
Et l'absence de "const" renseigne sur la possible modification de l'objet.

bkadoum

bkadoum a écrit a écrit :

ouais avec les pointeurs ca a l'air de mieux marcher, merci!




 
pardon ca marche parfaitement bien! Je peux modifier directement les donnees de ma classe et j'ai beau changer de fonctions les donnes restent a la valeur courante, je commence a trouver les pointeurs vraiment cool moi! ;)

bkadoum ouais avec les pointeurs ca a l'air de mieux marcher, merci!
BENB

tgrx a écrit a écrit :

airbg> les references c'est plus joli que les pointeurs...
 
void attack(Character& src, Character& dest)




NON, plutot les pointeurs comme ca on voit que attack peut modifier src et dest quand on relit, sinon...

AirBg tgrx > je suis d'accord, les références c mieux.
 
dans ce cas c'est plus simple avec un . plutot que ->
bkadoum

haahhahahaha a écrit a écrit :

houla.... on retourne jamais deux fois ds une fonction !
 
en + je comprend pas ce ke tu veux : hero = src et creature = dest a l'interieur de la fonction.
 
tu veux ke la fonction modifie les objets ?




 
Oui la classe contient les caractéristiques des personnage et la fonction attak doit modifier ces caractéristiques.

haahhahahaha reference c plus joli ke les pointeurs: c vrai mais juste ds les fonctions.
 
ds ce cas, pu de -> mais un simple .
tgrx airbg> les references c'est plus joli que les pointeurs...
 
void attack(Character& src, Character& dest)
AirBg Hey mais tu ne peux pas retourner 2 valeurs !!!! C'est impossible!
tu dois faire passer leur adresse en paramètre (pointeurs) pour pouvoir les modifier :
 
void attack(Character *src, Character *dest)  
{  
 
// pour modifier un attribut de Character faut faire par exemple:
// src -> nomattribut
// ne retourne rien !
}
haahhahahaha houla.... on retourne jamais deux fois ds une fonction !
 
en + je comprend pas ce ke tu veux : hero = src et creature = dest a l'interieur de la fonction.
 
tu veux ke la fonction modifie les objets ?
Lord II Une fonction ne peut retourner qu'une seule et unique variable. Pour plus de variable utiliser les pointeurs ....

 

[edit]--Message édité par lord ii--[/edit]

bkadoum J'arrive pas à retourner les valeurs d'un objet d'une fontion à une autre. Voici comment j'ai fait:
 
//Appel de la fonction, je passe en argument 2 objets provenant d'une classe nomée Character
 
attack(hero, creature);
 
//Voici la fonction qui doit retourner des objets de la classe Character:
 
Character attack(Character src, Character dest)
{
...
//A la fin de la fonction je retourne les 2 objets
return src;
return dest;
}
 
Donc la respectivement, les objets hero et creature devraient reprendre les valeurs de src et dest non? mais ca marche pas. Est-ce qu'il faut s'y prendre autrement? Dois-je écrire un constructeur de copie spécial? Utiliser des pointeurs? Je suis un peu perdu :)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)