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 :

Question sur une reference dans une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 253
    Par défaut Question sur une reference dans une classe
    Bonjour a tous, j'apprend le C++ a l'aide d'un tuto, et je me trouve devant un probleme ( commec'est la premiere fois que je commence la POO...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Personnage::attaquer(Personnage &cible)
    {
        cible.recevoirDegats(m_degatsArme);
        //On inflige à la cible les dégâts que cause notre arme
    }
    Dans ce code une reference sur cible, je me pose la question de savoir sur quelle variable elle "pointe" ( pas le pointeur ),
    1/ sur "cible" present dans la methode qu'on implemente ( dans cet exemple ),
    2/ ou dans le main comme pour les fonctions "normale" sans la POO ?

    Je sais que pour les fonctions "normale" ca commence dans le main, mais je ne connais pas la POO.

    Merci pour vos reponses precieuses.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Une référence en paramètre, ce n'est ni plus ni moins qu'un pointeur déguisé: le code assembleur généré pour la fonction est exactement le même que si tu avais écrit ceci:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Personnage::attaquer(Personnage *pCible)
    {
        pCible->recevoirDegats(m_degatsArme);
        //On inflige à la cible les dégâts que cause notre arme
    }
    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
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il n'y a pas de "cible" présent dans la classe qui tienne, puisque c'est l'argument de la fonction.

    L'argument est défini avec une valeur (le parametre) à l'appel.
    L'argument est plus "proche" de la fonction que les variables membres de this, donc il masque ces dernières.

    Une fonction membre est une fonction, avec des arguments. (certes, elle s'appelle sur une variable du bon type)

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 253
    Par défaut
    Bonjour et merci pour la reponse,
    &cible ne "pointe" pas aussi dans le main ?
    ou est ce que ca reste seulement dans la methode ?

    Desolé je debute.

    Edit,:
    zut j'ai posté juste apres la reponse de Leternel, ( que je remercie pour son aide) .

    Je ne connais pas encore this et le masquage, pouvez vous etre plus simple dans vos explications ?

    Voici le main :


    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
    #include <iostream>
    #include "Personnage.h" //Ne pas oublier
    using namespace std;
    int main()
    {
        Personnage david, goliath;
        //Création de 2 objets de type Personnage : david et goliath
        goliath.attaquer(david); //goliath attaque david
        david.boirePotionDeVie(20); //david récupère 20 de vie en
    buvant une potion
        goliath.attaquer(david); //goliath réattaque david
        david.attaquer(goliath); //david contre-attaque... c'est assez
    clair non ? 
        goliath.changerArme("Double hache tranchante vénéneuse de la
    mort", 40);
        goliath.attaquer(david);
        return 0;
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    cible pointe sur ce que l'appelant lui passe en paramètre, rien de plus, rien de moins.
    • Si c'est directement le main() qui appelle Personnage::attaquer() et s'il lui passe une variable locale, alors cible pointe sur une variable locale du main().
    • Si c'est tartempion() qui appelle Personnage::attaquer() et s'il lui passe un objet alloué sur le tas, alors cible pointera vers le tas.
    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.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 253
    Par défaut
    Merci pour ta reponse, je cojiterais la dessus, mais c'est deja plus clair, bonne journée a tous.

  7. #7
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Un argument se passe par copie ou par référence.
    Si c'est par copie, ben... il s'agit d'une copie.
    Si c'est une référence, c'est la variable-même qui est passée (et pas une copie).
    C'est très tautologie mais je vois pas comment dire mieux..
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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