Copie d'objet en passant un objet et en retournant son adresse ?
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:
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:
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:
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:
1 2 3
|
Personnage* Personnage::getPersonnage2(Personnage* p) { return p; }
Personnage* Personnage::getPersonnage3(Personnage& p) { return &p; } |
et là, si je fais :
Code:
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 ?