POO : problème d'objet [Résolu]

Signaler
Messages postés
23
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 juin 2008
-
Messages postés
23
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 juin 2008
-
Bonjour tout le monde, pour ceux qui connaissent le C++, j'ai un petit problème : je voudrais poser des conditions en fonction du nom de tel ou tel objet d'une même classe :

Pour exemple :

void Classe::attaque(Classe &Reference_a_la_Cible, int dommage)
{
if (Reference_a_la_Cible <strike>== Gaston</strike>) { cout << "Gaston est attaqué." }
if (Reference_a_la_Cible  ... { cout << "... est attaqué." }
}

La partie barrée étant la faute dans mon compilo (Gaston n'est pas défini ...).

6 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

Voici un exemple possible avec le nom du joueur stocké dans sa propre instance (j'ai pris une chaîne fixe mais on peut modifier avec de l'allocation dynamique) :

#include "stdio.h"
#include "string.h"




// --- Classe

class Attaquant
{
   public:
   Attaquant(const char*);
   ~Attaquant();
   void attaque(const Attaquant&);




   private:



   char m_Joueur[32];

};









// --- Constructeur


Attaquant::Attaquant(const char* Joueur)
{
   strcpy(m_Joueur,Joueur);
}






// --- Destructeur

Attaquant::~Attaquant()
{
}






// --- Attaque

void Attaquant::attaque(const Attaquant& Joueur)
{
   printf("%s est attaque par %s\n",Joueur.m_Joueur,m_Joueur);
}





void main()
{
   Attaquant Gaston("Gaston"),Paul("Paul");
   Paul.attaque(Gaston); // je veux le message : "Gaston est attaqué par Paul"
   Gaston.attaque(Paul); // je veux le mesage : "Paul est attaqué par Gaston"
}




Jean-François
Messages postés
38
Date d'inscription
jeudi 13 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2011
2
Où est défini ta variable Gaston, si ce n'est  pas une varible écrit la entre "", ce qui donne

void Classe::attaque(Classe &Reference_a_la_Cible, int dommage)
{
if (Reference_a_la_Cible == "Gaston") { cout << "Gaston est attaqué." }
if (Reference_a_la_Cible  ... { cout << "... est attaqué." }
}

Sinon, il faut que tu la définisse dans ton fichier .h ou .hpp comme ça si c'est du c++, si c'est du c, du utilise printf() à la place de std::cout et tu n'include pas strings
Je me souviens plus si il y a un s à string, essaye les 2(string et strings)

#include <strings>
class Nomdelaclasse
{
private:
//Les variables et fonctions privé
std::string Gaston="blabla";//Tu peut aussi la déclarer en variable public
public:
//Les variables et fonctions public
void attaque(Classe &Reference_a_la_Cible, int dommage);
};

Je pense que c'est ce que tu cherchais
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Impossible et interdit d'initialiser un membre d'une classe comme ca:
class Nomdelaclasse
{
private:
//Les variables et fonctions privé
std::string Gaston="blabla";//Tu peut aussi la déclarer en variable public
public:

Tout se fait dans le constructeur.
Messages postés
38
Date d'inscription
jeudi 13 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2011
2
Oups, j'avais oublié!!!
Messages postés
23
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 juin 2008

Mais pour moi Gaston est un objet de la classe Classe (il peut y en avoir une dizaine d'autre Objets de cette même classe) et, en faisant dans le main :

Classe Gaston, Paul
Paul.attaque(Gaston) //je veux le message : "Gaston est attaqué par Paul"
Gaston.attaque(Paul) //je veux le mesage : "Paul est attaqué par Gaston"

je dois poser une condition :
if (&reference_a_la_cible == Paul ou Gaston) { cout ... }

PS : le " " ça marche pas :/


 
Messages postés
23
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
20 juin 2008

ah ok j'ai compris, il fallait donner un paramètre supplémentaire pour le nom du joueur, merci ^_^