Retourner un objet en C++

Retourner un objet en C++ - Programmation

Marsh Posté le 16-05-2001 à 13:42:26    

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 :)

Reply

Marsh Posté le 16-05-2001 à 13:42:26   

Reply

Marsh Posté le 16-05-2001 à 13:46:16    

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]


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 16-05-2001 à 13:47:48    

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 ?


---------------
haahhahahaha == TheJackal
Reply

Marsh Posté le 16-05-2001 à 13:48:16    

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 !
}


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 16-05-2001 à 13:50:22    

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

Reply

Marsh Posté le 16-05-2001 à 13:52:30    

reference c plus joli ke les pointeurs: c vrai mais juste ds les fonctions.
 
ds ce cas, pu de -> mais un simple .


---------------
haahhahahaha == TheJackal
Reply

Marsh Posté le 16-05-2001 à 13:53:29    

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.

Reply

Marsh Posté le 16-05-2001 à 13:55:15    

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


---------------
"There's not such a thing as a stupid question, only stupid people..."
Reply

Marsh Posté le 16-05-2001 à 14:14:50    

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...

Reply

Marsh Posté le 16-05-2001 à 14:23:17    

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

Reply

Marsh Posté le 16-05-2001 à 14:23:17   

Reply

Marsh Posté le 16-05-2001 à 14:26:30    

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! ;)

Reply

Marsh Posté le 16-05-2001 à 14:27:33    

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.

Reply

Marsh Posté le 16-05-2001 à 14:31:47    

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

Reply

Marsh Posté le 16-05-2001 à 14:44:43    

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...

Reply

Marsh Posté le 16-05-2001 à 14:51:55    

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;

Reply

Marsh Posté le 16-05-2001 à 14:58:51    

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]

Reply

Marsh Posté le 16-05-2001 à 15:00:38    

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...


---------------
haahhahahaha == TheJackal
Reply

Marsh Posté le 16-05-2001 à 15:04:50    

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

Reply

Marsh Posté le 16-05-2001 à 15:12:08    

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...

Reply

Marsh Posté le 16-05-2001 à 15:12:21    

darkoli a écrit a écrit :

 
 
question de gouts en fait. Mois je prefere les pointeurs




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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed