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

  FORUM HardWare.fr
  Programmation

  Retourner un objet en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Retourner un objet en C++

n°32162
bkadoum
Posté le 16-05-2001 à 13:42:26  profilanswer
 

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

mood
Publicité
Posté le 16-05-2001 à 13:42:26  profilanswer
 

n°32166
Lord II
PIB2000
Posté le 16-05-2001 à 13:46:16  profilanswer
 

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 .
n°32168
haahhahaha​ha
Posté le 16-05-2001 à 13:47:48  profilanswer
 

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
n°32169
AirBg
The Philosopher
Posté le 16-05-2001 à 13:48:16  profilanswer
 

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..."
n°32172
tgrx
My heart is pumping for love
Posté le 16-05-2001 à 13:50:22  profilanswer
 

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

n°32174
haahhahaha​ha
Posté le 16-05-2001 à 13:52:30  profilanswer
 

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


---------------
haahhahahaha == TheJackal
n°32175
bkadoum
Posté le 16-05-2001 à 13:53:29  profilanswer
 

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.

n°32177
AirBg
The Philosopher
Posté le 16-05-2001 à 13:55:15  profilanswer
 

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..."
n°32188
BENB
100% Lux.
Posté le 16-05-2001 à 14:14:50  profilanswer
 

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

n°32193
bkadoum
Posté le 16-05-2001 à 14:23:17  profilanswer
 

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

mood
Publicité
Posté le 16-05-2001 à 14:23:17  profilanswer
 

n°32195
bkadoum
Posté le 16-05-2001 à 14:26:30  profilanswer
 

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

n°32196
verdoux
And I'm still waiting
Posté le 16-05-2001 à 14:27:33  profilanswer
 

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.

n°32200
bkadoum
Posté le 16-05-2001 à 14:31:47  profilanswer
 

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

n°32204
BENB
100% Lux.
Posté le 16-05-2001 à 14:44:43  profilanswer
 

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

n°32213
El_gringo
Posté le 16-05-2001 à 14:51:55  profilanswer
 

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;

n°32220
verdoux
And I'm still waiting
Posté le 16-05-2001 à 14:58:51  profilanswer
 

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]

n°32223
haahhahaha​ha
Posté le 16-05-2001 à 15:00:38  profilanswer
 

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
n°32227
darkoli
Le Petit Dinosaure Bleu
Posté le 16-05-2001 à 15:04:50  profilanswer
 

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

n°32231
BENB
100% Lux.
Posté le 16-05-2001 à 15:12:08  profilanswer
 

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

n°32233
El_gringo
Posté le 16-05-2001 à 15:12:21  profilanswer
 

darkoli a écrit a écrit :

 
 
question de gouts en fait. Mois je prefere les pointeurs




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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Retourner un objet en C++

 

Sujets relatifs
[VB]objet defini...non defini[JavaScript] ça va jusqu'ou en objet ??
objet COM/outlookPascal Objet, au secours !!!
[ASP] Pb avec un script JavaScript : Objet Attendu[xml]: parcours d'un objet DOM
Access 97 - Insertion objet OLE[JAVA] Evenements - recuperation du type de l'objet...
[VB6] détection d'objet ouvertsVB6 Passé un objet form a une procédure commune???
Plus de sujets relatifs à : Retourner un objet en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR