IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Affichage (printf ou cout) du nom d'un objet (ou d'une variable)


Sujet :

Langage C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Affichage (printf ou cout) du nom d'un objet (ou d'une variable)
    Bonjour à tous. Je ne sais pas si ce que je cherche existe. Voila le problème.

    Disons que j'ai une classe


    et que je crée 2 objets (En statique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int main ()
     classe obj1,obj2;
    ce que je veux faire c'est afficher le nom de l'objet courant à partir de ma méthode d'affichage genre "L'attribut1 de l'objet obj1 est ..." pour obj1.afficher()
    et "L'attribut1 de l'objet obj2 est ..." pour obj2.afficher() .

    En résumé, je cherche quelque chose comme this mais qui me donne le nom de l'objet courant au lieu de me donner son adresse (ce que fait this).

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Dans un exécutable compilé sans générer les informations de débogage, le nom des variables n'existe même plus. Pour l'exécutable, seule l'adresse (ou dans le cas de variables locales, l'offset par rapport au pointeur de pile) compte.

    Avec les informations de débogage, c'est possible, mais ça dépend du format utilisé par le compilo et la difficulté dépend de l'existence ou non de bibliothèques permettant de lire le format en question.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Comme l'a dit Médinoc, le nom des variables tel que toi tu le vois dans ton code disparait a la compilation. Cependant il t'est tout a fait possible de faire ce que tu demandes de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    classe::classe(std::string name) : m_name(name)
    {
    }
     
    std::string const &classe::getName() const
    {
      return m_name;
    }
     
    std::ostream &operator<<(std::ostream output, classe const &s)
    {
      output << s.getName();
      return output;
    }

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    L'idéal pour ce que tu veux faire est de reprendre le fonctionnement de java avec la méthode toString qui permet de retouner une String contenant toute les information de ta classe, à savoir les attributs.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class toto {
    public:
      toto(std::string name, std::string val1, std::string val2): _name(name), _val1(val1), _val2(val2) {};
     
      std::string toString() {
         return (_name + ";val1="+_val1+";val2="+_val2);
      }
    private:
      std::string _name;
      std::string _val1;
      std::string _val2;
     
    }
    Et d'utiliser ce dont parle imperio:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::ostream &operator<<(std::ostream output, toto const &s)
    {
      output << s.toString();
      return output;
    }
    Comme ça, ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main() {
    toto maclasse("maclasse", "bobby", "son frere");
    std::cout << maclasse << std::endl;
    return (0);
    }
    produira:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maclasse;val1=bobby;val2=son frere
    C'est souvent la méthode la plus simple pour debugguer efficacement ou sérializer tes classes
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par skeud Voir le message
    C'est souvent la méthode la plus simple pour debugguer efficacement ou sérializer tes classes
    Les bonnes pratiques java recommandent de n'utiliser cette méthode que pour le debug, et d'implémenter la sérialisation (ou toute autre production de représentation, même de type String) séparément.
    Côté C++, je pense qu'il est préférable aussi de ne pas tout mélanger (debug d'un côté, sérialisation ou affichage métier de l'autre)

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses. C'est très clair.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le nom du fichier en cours dans une variable.
    Par quiky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 06/05/2009, 13h28
  2. Réponses: 9
    Dernier message: 25/02/2008, 11h40
  3. Réponses: 5
    Dernier message: 10/05/2007, 13h31
  4. Réponses: 1
    Dernier message: 04/04/2007, 11h03
  5. Réponses: 3
    Dernier message: 19/01/2007, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo