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 :

Declaration et initialisation de référence sur une structure


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 198
    Points : 37
    Points
    37
    Par défaut Declaration et initialisation de référence sur une structure
    Bonjour a toutes et a tous ,
    Tout dabord , voici le code :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <iostream>
    struct Coordonnees
    {
        int x=5;
        int y=10;
    };
     
    void change(Coordonnees &reference);
    using namespace std;
     
    int main()
    {
        Coordonnees point;
     
        cout << "x (avant fonction) : " << point.x << endl; 
        cout << "y (avant fonction) : " << point.y << endl;
        change(point); 
        cout << "x (apres fonction) : " << point.x << endl; 
        cout << "y (apres fonction) : " << point.y << endl;
        return 0;
    }
     
    void change(Coordonnees &reference) 
    {
        int temp;
        temp=reference.x;
        reference.x = reference.y;
        reference.y = temp;
    }
    En regardant ce code , je ne comprends pas pourquoi la reference (&reference ) n'a pas été initialisé avec point . J'ai lu par ailleurs , qu'une référence doit etre initialisée des sa déclaration . Je voyais plutot ca de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main()
    {
        Coordonnees point;
        int &reference = point;
        .......
    }
    C'est pas tres claire dans ma tete . Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par chris7522 Voir le message
    En regardant ce code , je ne comprends pas pourquoi la reference (&reference ) n'a pas été initialisé avec point . J'ai lu par ailleurs , qu'une référence doit etre initialisée des sa déclaration . Je voyais plutot ca de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int main()
    {
        Coordonnees point;
        int &reference = point;
        .......
    }
    C'est pas tres claire dans ma tete . Merci de votre aide
    Rappelle moi, quel est le type de point dans ce code et quel est le type de reference:quetion:

    N'as-tu pas furieusement l'impression de vouloir faire rentrer un clou carré (car du type Coordonnee) dans un trou rond (car de type int)

    Les identifiant (point et reference n'ont aucun espèce d'importance pour le compilateur. Tu aurais pu les appeler salut et au_revoir ou machin et brol ou bidule, le compilateur s'en serait foutu comme de sa première chemise.

    Ce qui importe au compilateur, c'est le type de la donnée que tu identifies au travers de ces noms: si tu veux déclarer une référence sur une donnée de type Coordonnée, il faut que tu déclares la référence comme étant ... de type Coordonnee.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <iostream>
    struct Coordonnees
    {
        int x=5;
        int y=10;
    };
     
    void change(Coordonnees &reference);
    using namespace std;
     
    int main()
    {
        Coordonnees point;
     
        cout << "x (avant fonction) : " << point.x << endl; 
        cout << "y (avant fonction) : " << point.y << endl;
        change(point); 
        cout << "x (apres fonction) : " << point.x << endl; 
        cout << "y (apres fonction) : " << point.y << endl;
        return 0;
    }
     
    void change(Coordonnees &reference) 
    {
        int temp;
        temp=reference.x;
        reference.x = reference.y;
        reference.y = temp;
    }
    Si ce code fonctionne, c'est parce que tu initialise explicitement la donnée temp (qui est de type int) avec la valeur de la donnée membre x (qui est, par chance, lui aussi de type int) issus de reference (qui elle est de type Coordonnee).
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 198
    Points : 37
    Points
    37
    Par défaut
    Merci de toutes ces explications !
    Plus de zone d'ombre a présent , point est de type Coordonnees, reference est de type int. Ca ne va pas ensemble, il faut les mêmes types . Bien compris .

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

Discussions similaires

  1. Initialiser des données d'une structure sur une form
    Par soso78 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/12/2007, 15h41
  2. vecteur sur une structure
    Par sam_123 dans le forum C++
    Réponses: 6
    Dernier message: 25/01/2006, 07h30
  3. Memset sur une structure
    Par ghostdogpr dans le forum C
    Réponses: 4
    Dernier message: 16/12/2005, 13h43
  4. Réponses: 2
    Dernier message: 13/12/2005, 16h48
  5. Comment avoir une référence sur une Vue
    Par Philippe299 dans le forum MFC
    Réponses: 1
    Dernier message: 12/08/2005, 10h03

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