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 les références.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Par défaut Question sur les références.
    Supposons que j'ai une fonction qui renvoit un type Date par référence, car je me suis fait une classe Date mais je voudrais pouvoir me faire une fonction Now() qui renvoit un type Date lorsque je veux affecter la date en cours a un objet Date.

    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Date& Now() {
     
       Date *date = new Date; // le constructeur met la date en cours par défaut.
       return *date;
     
    }
    Ensuite dans une autre fonction je fais:
    Date *date = Now();

    Étant donné que je le renvoit par référence il ne va pas fonctionner car en dehors de la fonction date n'existe plus ? Je devrais donc le renvoyer par copie ?

    Vous allez me dire que Now() ne sert à rien si mon constructeur par défaut met la date du jours de toute façon c'est vrai, mais je voudrais faire cela parce que j'ai une classe Tache dont je voudrais passer une date et y mettre par défaut la date en cours.

    Tache(string description = "", Date uneDate = Now());

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Étant donné que je le renvoit par référence il ne va pas fonctionner car en dehors de la fonction date n'existe plus ? Je devrais donc le renvoyer par copie ?
    Oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date Now()
    {
        return Date();
    }
    Vous allez me dire que Now() ne sert à rien si mon constructeur par défaut met la date du jours de toute façon c'est vrai, mais je voudrais faire cela parce que j'ai une classe Tache dont je voudrais passer une date et y mettre par défaut la date en cours.

    Tache(string description = "", Date uneDate = Now());
    Ben...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tache(string description = "", Date uneDate = Date());

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Par défaut
    Ah ok on peut seulement écrire Date() ?

    Cela apelle le constructeur Date() et renvoie une copie de l'objet construit ?
    ou si il renvoit une référence ?

    Mais comment se fait-il que je doive spécifier les () et que lorsque je fais Date date = Date; que je ne dois pas spéficier les () ?

    ou quand je fais Date *date = new Date; ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ah ok on peut seulement écrire Date() ?
    Date() construit un objet temporaire de type Date par défaut, donc si tu l'affectes dans la foulée il n'y a aucun problème.

    Mais comment se fait-il que je doive spécifier les () et que lorsque je fais Date date = Date; que je ne dois pas spéficier les () ?
    Non il faut bien les spécifier si tu écris ça.
    Note qu'ici c'est redondant, si tu veux construire un objet Date par défaut il suffit de faire ça :
    ou quand je fais Date *date = new Date; ?
    Les parenthèses sont optionnelles dans ce cas, mais si tu les mets ça marchera tout aussi bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date* date = new Date();

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Par défaut
    Ok

    Mais alors Date date;
    et Date date = Date;

    C'est la même chose ou si le comportement est différent ?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca ça ne compile pas, comme je te l'ai dit là il faut les parenthèses pour appeler le constructeur par défaut.

    La différence avec "Date date;" c'est que le premier va construire un objet Date temporaire, puis le passer au constructeur par copie pour construire la variable date. Donc ça fait une construction inutile, même si les compilos savent optimiser ça.

Discussions similaires

  1. Question sur les références
    Par Cbonniot dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 22/01/2010, 10h41
  2. questions sur les références symboliques
    Par Jasmine80 dans le forum Langage
    Réponses: 2
    Dernier message: 15/01/2009, 09h30
  3. Questions sur les références
    Par Az3l_ dans le forum C++
    Réponses: 2
    Dernier message: 11/01/2009, 01h55
  4. Encore une question sur les références
    Par bouba dans le forum C++
    Réponses: 7
    Dernier message: 19/02/2007, 14h16
  5. Question sur les références
    Par vdumont dans le forum C++
    Réponses: 7
    Dernier message: 05/05/2006, 01h49

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