Bonjour Antoine, concernant le TP sur le western : de manière générale, les const, virtual et override sont bien mis. dans la classe Humain : dans la méthode sePresenter : on doit faire appel à getNom() et non à l'attribut nom directement, car sinon on aura pas l'affichage voulu quand on l'appellera à partir d'un objet de classe fille. il n'y a pas de méthode narrateur. QUand on dit dans le sujet que le narrateur dit c'est que l'on fera simplement un cout pour afficher une ligne de texte sans que ce soit un personnage qui parle. dans boire, ce n'est pas un cout qu'il faut faire car ici c'est le personnage qui dit/parle donc on fait appel à parler pour dire la phrase voulue. dans la classe Dame : dans dame.cpp ne pas oublier d'inclure cowboy.hpp et brigand.hpp car on a besoin de connaître les méthodes de ces classes pour y faire appel habituellement, quand dans un constructeur on fait appel au constructeur de la classe mère, la notation utilisée de nos jours est celle avec les {} et plus (). On écrira plutôt : Dame::Dame(const string &nom, const string &boisson, const string &couleurRobe) : Humain{nom, boisson}, couleurRobe{couleurRobe} quand elle change de robe elle dit un truc d'après le sujet => donc dans setCouleurRobe ne pas oublier cette ligne dans seFaireLiberer ne pas oublier de la libérer la dame et de retourner le bouléen qui indique que ça a été fait dans la classe Brigand : dans brigand.cpp ne pas oublier d'inclure dame.hpp et sherif.hpp car on a besoin de connaître les méthodes de ces classes pour y faire appel pour la méthode kidnapper, la dame prise en paramètre n'est pas const car en fin de compte elle va être modifiée par l'appel à seFaireKidnapper (elle deviendra captive). et puisque seFaireKidnapper a une ref sur Brigand en paramètre on doit lui passer lors de l'appel le brigand qui est pointé par this et non ce que contient this(l'adresse du brigand) dans seFaireEmprisonnerPar : ne pas oublier le booléen à retourner qui indique si le brigand a vraiment été fait prisonnier par cette action (peut être qu'il n'a pas été emprisonner ici car il l'était déjà). Et donc ne pas oublier toutes les lignes de codes de cette fonction permettant de gérer cela dans la classe Cowboy : dans cowboy.cpp ne pas oublier d'inclure dame.hpp et brigand.hpp car on a besoin de connaître les méthodes de ces classes pour y faire appel pour la méthode liberer : normalement un cowboy gagne en popularité à chaque fois qu'il libère une dame (seulement si il l'a bien libérée bien sûr) et auparavant il la flatte et seFaireLiberer attend un cowboy en param et pas son adresse alors on lui donne *this et pas this et comme lors de tout cela la dame va être modifiée : elle va devenir libre par l'appel à seFaireLiberer, donc elle ne doit pas être const dans la déclaration du prototype. quand le Cowboy tire sur un brigand, il ne fait que parler, personne n'est libéré ou modifié => méthode const et pas d'appel à liberer dans la classe Barmen : pas besoin de dire que les classes dame, cowboy, brigand..... existent la methode servirVerre sert un vert à un humain de manière général. Pour savoir quel verre servir, c'est facile l'appel à la méthode getBoisson le dira. dans le constructeur de Barmen, si pas de nom de bar fourni, il est dit dans le sujet que le nom du bar est "chez"+nom, et pas autre chose. quand un barmen parle, il le fait comme un humain avec juste mon gars à la fin du texte dans la classe Shérif : dans sherif.cpp ne pas oublier d'inclure brigand.hpp car on a besoin de connaître les méthodes de cette classe pour y faire appel méthode coffrerBrigand : le brigand ne peut être const, il sera probablement modifié par l'appel à seFaireEmprisonner et voir le code, je l'ai modifié rechercherBrigand, ne fait rien d'autre que de l'affichage, ni le brigand, ni le shérif ne sont modifiés => const et const. et j'ai modifié le code. dans le main j'ai remplacé tous les appels au narrateur par des cout .