Bonjour à tous,
Je m'excuse pour cette question bête : je viens de m'apercevoir que j'avais une grosse lacune dans la matière, en renvoyant une adresse d'un objet.

Pour l'exemple, j'ai une classe Personnage qui a de base un nom et une vie.

Si j'ai deux personnages jean et hector qui ont chacun 10 points de vie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Personnage *jean = new Personnage("jean",10);
Personnage *hector = new Personnage("hector",10);
puis que je fais (1)
et que j'enlève de la vie à hector, jean perdra la vie aussi, puisque jean est devenu hector, ok.

Maintenant avec la fonction suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
Personnage* Personnage::getPersonnage(Personnage p) {
	return &p;
}
// pas de static, là n'est pas le problème
Si, à la place de (1) je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
jean = jean->getPersonnage(*hector);
et que je diminue la vie de hector, jean prends le nom de hector, mais ses points restent échangés. J'avoue ne pas comprendre pourquoi.
J'ai deux autres fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Personnage* Personnage::getPersonnage2(Personnage* p) { return p; }
Personnage* Personnage::getPersonnage3(Personnage& p) { return &p; }
et là, si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
jean = jean->getPersonnage2(hector);
// ou
jean = jean->getPersonnage3(*hector);
jean devient hector, je comprends puisqu'on passe l'objet lui-même en paramètre.

Si une âme charitable voulait bien m'expliquer le pourquoi du comment avec getPersonnage,
Merci par avance.

Jean-Eude

Edit & PS : comme dit dans le titre du post, cela réalise-t'il une copie ? Si c'est le cas, est-ce bien fait ?