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

 C++ Discussion :

Nommage des objets


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Nommage des objets
    Bonjour,

    Désolé par avance pour cette question qui a dû être posé 1 milliard de fois mais après de longues heures de recherches sur internet, je n'arrive pas à savoir dans quelle direction je dois aller... Pourtant mon problème peut paraître simple.... je ne cherche pas de solution toute faite car je voudrais y arriver par moi-même, mais je voudrais juste que l'on me mette le pied à l'étrier :

    1. je demande à l'utilisateur de saisir un nom
    2. je stocke ce nom dans une variable
    3. je veux utiliser le contenu de cette variable pour nommer mon objet

    On a donc :

    et dans le main

    initialisation des variables...
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    do
    {
    cout << "Saisissez le nom du joueur" << endl;
    cin >> nomJoueur;
    Joueur nomJoueur(paramètres1, 2...)
    cout << "Voulez-vous créer un autre joueur"; endl;
    }while rep=="o";
    Je crois avoir compris que l'on ne pouvait pas créer un objet dans une boucle car il est détruit à la fin ?

    Je crois avoir aussi compris que l'on ne pouvait pas utiliser directement une variable pour nommer un objet ?

    Est-ce bien cela et si oui, vers quoi dois-je m'orienter ?

    Merci d'avance pour vos retours

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Il faut utiliser la balise CODE

    Citation Envoyé par Terryan_999 Voir le message
    Je crois avoir compris que l'on ne pouvait pas créer un objet dans une boucle car il est détruit à la fin ?
    Oui, une variable créée dans un bloc (ce qu'il y a entre { }) et détruite à la fin de ce bloc

    Citation Envoyé par Terryan_999 Voir le message
    Je crois avoir aussi compris que l'on ne pouvait pas utiliser directement une variable pour nommer un objet ?
    Bien sûr que si. Par exemple dans ton code, la variable nomJoueur est bien un objet Joueur.

    Citation Envoyé par Terryan_999 Voir le message
    Est-ce bien cela et si oui, vers quoi dois-je m'orienter ?
    Il faut que tu utilises un tableau de Joueur.
    Tu peux donc utiliser std::vector.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    char rep;
    std::vector<Joueur> joueurs;
    do
    {
        cout << "Saisissez le nom du joueur" << endl;
        cin >> nomJoueur;
        joueurs.push_back(Joueur(nomJoueur));
        cout << "Voulez-vous créer un autre joueur ? (o/n)" << endl;
        cin >> rep;
    }
    while (rep == 'o');
     
    std::cout << "Vous avez créé " << joueurs.size() << " joueurs" << std::endl;
    for (std::size_t i = 0; i < joueurs.size(); ++i)
    {
        std::cout << "- " << joueurs[i].nom() << std::endl;
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    une petite recherche dans la FAQ sur les mot-clés portée et scope donne quelques résultats. Voire portée des variables.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup... je regarde tout cela, je fais chauffer les neurones et je vous tiens informés

    edit : cela fonctionne... j'ai pu faire fonctionner les membres de ma fonction sans aucun problème...

    J'ai juste un souci avec la boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (size_t i = 0; i < joueurs.size(); ++i)
    {
        std::cout << "- " << joueurs[i].nom() << std::endl;
    }
    J'ai pu la désactiver car je n'en avais pas besoin (pour l'instant) mais cela me renvoie l'erreur suivante :

    error: no matching function for call to 'Joueur::nom()'

    J'imagine que le .nom doit renvoyer sur un membre de la classe qui s'appellerait nom mais je ne sais pas quoi mettre à l'intérieur... et pourquoi le joueurs[i] ne suffit-il pas à lui-même ?

    Merci pour le retour

  5. #5
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    pour que joueurs[i] "suffise", il faut déclarer le vecteur ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<std::string> joueurs;
    Pour stocker directement le nom dans le vector.

    Pour définir le joueur de manière plus détaillée, il faudrait une classe "Joueur". Ou bien une structure.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Je crois avoir compris que l'on ne pouvait pas créer un objet dans une boucle car il est détruit à la fin ?
    Citation Envoyé par Ehonn Voir le message
    Oui, une variable créée dans un bloc (ce qu'il y a entre { }) et détruite à la fin de ce bloc ]
    Oui, alors là, attention au vocabulaire. Une variable n'est pas un objet et un objet n'est pas une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Joueur* nomJoueur= new Joueur();
    Ce code crée un joueur. La variable nomJoueur sera détruite en sortant du bloc, mais pas l'objet dont on a réservé la place en mémoire (jamais récupérée).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Terryan_999 Voir le message
    J'imagine que le .nom doit renvoyer sur un membre de la classe qui s'appellerait nom mais je ne sais pas quoi mettre à l'intérieur... et pourquoi le joueurs[i] ne suffit-il pas à lui-même ?
    Il s'agissait d'un exemple dont il faut s'inspirer et à ne pas recopier sans rien y comprendre.
    Et comme tout exemple, il doit être adapté à ton propre sujet/besoin.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par Terryan_999 Voir le message
    J'imagine que le .nom doit renvoyer sur un membre de la classe qui s'appellerait nom mais je ne sais pas quoi mettre à l'intérieur... et pourquoi le joueurs[i] ne suffit-il pas à lui-même ?
    On demande à saisir le nom du joueur. Dans mon exemple j'ai supposé que la classe Joueur avait un constructeur qui prend le nom du joueur et qu'elle avait un accesseur qui retourne le nom du joueur.
    Il s'agissait que d'un exemple d'utilisation pour montrer comment utiliser std::vector.
    Si tu veux afficher directement joueurs[i], c'est-à-dire, un Joueur, il te suffit de définir la surcharge de l'opérateur << entre un std::ostream et un Joueur.

    Citation Envoyé par Flodelarab Voir le message
    Oui, alors là, attention au vocabulaire. Une variable n'est pas un objet et un objet n'est pas une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Joueur* nomJoueur= new Joueur();
    Ce code crée un joueur. La variable nomJoueur sera détruite en sortant du bloc, mais pas l'objet dont on a réservé la place en mémoire (jamais récupérée).
    Tu aurais préféré «nomJoueur manipule bien un objet Joueur» au lieu de «nomJoueur est bien un objet Joueur» ? J'ai du mal à voir en quoi c'est faux.
    Dans ton exemple (hors sujet pour moi), comme tu le dis, la variable nomJoueur (nom de variable mal choisie) (qui contient une adresse) est bien détruite (et c'est pour ça qu'il sera "si difficile" de faire le delete qui va bien).

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Ok merci à tous... j'ai bien compris le fonctionnement maintenant et mon code fonctionne.... effectivement ,j'avais bien pensé qu'il fallait une méthode pour le ".nom" et un accesseur

    J'ai donc bien une classe joueur avec des méthodes et j'accède à mes méthodes en mettant directement joueurs[i].(+ la méthode). J'utilise également une boucle pour afficher l'état de mes joueurs (plusieurs caractéristiques) et tous les membres du tableau s'affichent

    Merci encore

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

Discussions similaires

  1. Nommage classifié des objets
    Par FOCUS77 dans le forum Contribuez
    Réponses: 2
    Dernier message: 01/06/2015, 15h52
  2. Réponses: 6
    Dernier message: 12/02/2004, 21h55
  3. Regle de nommage des versions
    Par Jay dans le forum Windows
    Réponses: 5
    Dernier message: 24/11/2003, 09h26
  4. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 11h47
  5. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53

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