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 :

fonctions renvoyant une référence


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Par défaut fonctions renvoyant une référence
    Bonsoir,

    j'ai 2 questions sur le chapitre 12 que j'ai en pièce jointe :

    dans le cours 12, page 5/8(que je joints en fichier joint), dans la section : "fonctions renvoyant une référence", on donne un exemple avec la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int & uneDesVariables(int &une Var, int &uneAutre)
    {
    if (rand()%2==1)
    return uneVar;
    else
    return uneAutre;
    }

    et après je ne comprends ce que veut dire : une telle fonction pourra être utilisée pour laisser le hasard décider laquelle de 2 variables doit être mise à 0.

    1) Pouvez-vous m'expliquer ce qu'il se passe quand on applique les lignes de code suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int a=2;
    int b=3;
    unedesVariables(a,b)=0;
    ?

    car je ne connais pas cette façon d'imposer à une fonction sa valeur finale.

    2) Ensuite on dit : bien que l'intérêt de cette technique puisse sembler à priori assez marginal, nous rencontrerons dès la leçon précédente des situations où le renvoi d'une référence s'avère indispensable.

    Pouvez-vous me dire, avec exemple à l'appui, dans quel cas c'est indispensable, par exemple ?


    D'avance, merci.

    Cordialement
    Images attachées Images attachées
    • Type de fichier : pdf L12.pdf (170,6 Ko, 447 affichages)

  2. #2
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Citation Envoyé par matlab_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int & uneDesVariables(int &une Var, int &uneAutre)
    {
    if (rand()%2==1)
    return uneVar;
    else
    return uneAutre;
    }
    et après je ne comprends ce que veut dire : une telle fonction pourra être utilisée pour laisser le hasard décider laquelle de 2 variables doit être mise à 0.

    1) Pouvez-vous m'expliquer ce qu'il se passe ?
    Déroule ta fonction. rand() renvoie un nombre aléatoire. % est l’opérateur « reste de la division », donc rand()%2 == 1 est vrai si le nombre aléatoire est pair, faux sinon. Donc vrai 1 fois sur deux .

    Ensuite, en fonction, tu renvoies…

    Citation Envoyé par matlab_ Voir le message
    2) Ensuite on dit : bien que l'intérêt de cette technique puisse sembler à priori assez marginal, nous rencontrerons dès la leçon précédente des situations où le renvoi d'une référence s'avère indispensable.

    Pouvez-vous me dire, avec exemple à l'appui, dans quel cas c'est indispensable, par exemple ?
    Dès que tu as des objets à sémantique d’entité (non-copiables), ça devient rapidement indispensable. Quitte à ce que la référence soit constante, d’ailleurs, pour s’assurer qu’on ne modifie pas l’objet.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Hum, tu aurais dû peut-être suivre le conseil que l'on t'avait donné et changer de support de cours.

    Sinon, la fonction prend des références sur 2 variables et retourne une référence sur l'une des deux variables. Cela permet donc de modifier une seule des 2 variables.
    Cette écriture est un peut étrange, mais pas interdite. Je pense qu'on la trouve plus souvent sous la forme de l'idiome des listes chaînées (named parameter), par exemple avec les QString :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString("une chaîne avec %1 paramètres de types %2.").arg(10).arg("entier");
    qui génère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "une chaîne avec 10 paramètres de types entier."
    Sinon, généralement, retourner une référence peut être mauvais voir dangereux, il faut faire attention que la variable n'est pas locale à la fonction. Et dans le cas d'une variable membre, on revient sur le problème des getter, qui sont une mauvaise pratique de la POO

    Citation Envoyé par white_tentacle
    Dès que tu as des objets à sémantique d’entité (non-copiables), ça devient rapidement indispensable. Quitte à ce que la référence soit constante, d’ailleurs, pour s’assurer qu’on ne modifie pas l’objet.
    Modulo le problème d'utilisation des getters

  4. #4
    Membre émérite
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Par défaut
    Bonsoir,

    On retrouve aussi cette écriture renvoyant l'un ou l'autre dans les min/max de la STL.

    Après, c'est quand même le genre de chose à manier avec parcimonie et rarement utile...

    Sinon, généralement, retourner une référence peut être mauvais voir dangereux, il faut faire attention que la variable n'est pas locale à la fonction.
    Une référence constante ou un pointeur où on se demande si on récupère la responsabilité ou une copie, s'il est forcément initialisé... Dilemme.

  5. #5
    Membre confirmé
    Homme Profil pro
    Apprenti
    Inscrit en
    Décembre 2010
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti

    Informations forums :
    Inscription : Décembre 2010
    Messages : 86
    Par défaut 3 questions
    Bonjour,

    j'ai plusieurs questions :

    1) Apparemment, le cours en pièce jointe traite du cas où le renvoi d'une référence par une fonction est obligatoire. Pouvez-vous me dire où exactement dans ce cours en pièce jointe, on parle du cas où le renvoi d'une référence par une fonction est obligatoire ?

    2) Par ailleurs, pouvez-vous me donner un exemple où c'est effectivement nécessaire d'utiliser le renvoi d'une référence ?

    3) A quoi cela peut servir de réécrire un cours de c++ pour débutants ,qui était à la base, écrit en c++, mais en y utilisant quelque chose qui s'appelle :"la librairie Qt" ?

    D'avance merci pour vos réponses à ces 3 questions
    cordialement
    Images attachées Images attachées
    • Type de fichier : pdf L15.pdf (274,0 Ko, 197 affichages)

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour 1 et 2, lis le cours toi même. Nous, on connaît la réponse, si on te la donne, tu n'apprendras jamais. Il est nécessaire que tu fasses l'effort de rechercher par toi même
    Propose toi même une réponse à tes questions 1 et 2 et on te dira si c'est bon ou pas et pourquoi.

    Pour 3 : Un cours de C++ permet d'apprendre le langage C++. Un cours sur Qt permet d'apprendre à utiliser la bibliothèque Qt en C++. Tu peux avoir plusieurs cours qui parlent de C++ ou de Qt et qui n'aborde pas les questions de la même façon. C'est complémentaire

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2010, 15h21
  2. Problème avec fonction renvoyant une "Nested Table"
    Par Sunchaser dans le forum PL/SQL
    Réponses: 4
    Dernier message: 20/05/2009, 17h19
  3. fonction renvoyant une matrice
    Par sub-0 dans le forum Débuter
    Réponses: 6
    Dernier message: 31/12/2008, 17h59
  4. [VC++] opérateur renvoyant une référence
    Par olivier57b dans le forum Visual C++
    Réponses: 2
    Dernier message: 01/10/2006, 11h20
  5. Fonction renvoyant une string
    Par salseropom dans le forum C
    Réponses: 8
    Dernier message: 04/05/2006, 11h44

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