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
puis que je fais (1)
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);
et que j'enlève de la vie à hector, jean perdra la vie aussi, puisque jean est devenu hector, ok.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 jean = hector;
Maintenant avec la fonction suivante :
Si, à la place de (1) je fais :
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 jean = jean->getPersonnage(*hector);
J'ai deux autres fonctions :
et là, si je fais :
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; }
jean devient hector, je comprends puisqu'on passe l'objet lui-même en paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 jean = jean->getPersonnage2(hector); // ou jean = jean->getPersonnage3(*hector);
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 ?
Partager