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 :

comment choisir pointeurs et références


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut comment choisir pointeurs et références
    Bonjour,

    J'aimerais savoir quand est ce qu'on utilise les pointeurs en C++ (dans le cas où on ne mélange pas C et C++) étant donné qu'on utilise les références pour manipuler l'adresse des objets.

    Est ce que quelqu'un aurait un cas à montrer où on ne peut pas se passer des pointeurs ?

    De manière générale, quand est ce qu'il faut utiliser les pointeurs et quand est ce qu'il faut utiliser les références ?

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Quand tu peux avoir besoin que ta variable ne référence rien du tout.

    Un pointeur peut être nul, alors qu'une référence doit toujours être liée à un objet existant.

    Mais le mieux est souvent de passer par un pointeur intelligent.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Il y a deux cas principaux :

    Le premier, c'est si tu estimes qu'un argument ou une variable peut ne pas exister, et qu'il faut donc pouvoir tester la "non existance" de l'objet.

    Une référence étant l'alias d'un objet, elle présente une garantie de non nullité qui est assez embêtante quand il est justement question de faire en sorte que l'objet puisse ne pas exister

    L'exemple classique est celui de n'importe quelle relation parent <--> enfant dans laquelle l'enfant devrait avoir une référence sur son parent mais où l'enfant, qui peut aussi être parent, n'a pas forcément de parent

    Le deuxième cas dans lequel l'utilisation de pointeurs est quasiment incontournable, c'est lorsque tu as une fonction renvoyant un objet polymorphe qui devra décider, sur base d'informations récupérées "par ailleurs" du type réel d'un objet polymorphe qu'elle doit créer et que cet objet doit être renvoyé.

    Autrement, l'idéal est de partir du principe qu'il vaut mieux utiliser les références chaque fois que possible et les pointeurs si tu n'as vraiment pas d'autre choix
    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

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Le deuxième cas dans lequel l'utilisation de pointeurs est quasiment incontournable, c'est lorsque tu as une fonction renvoyant un objet polymorphe qui devra décider, sur base d'informations récupérées "par ailleurs" du type réel d'un objet polymorphe qu'elle doit créer et que cet objet doit être renvoyé.
    Je ne comprends pas cette partie. Tu penses à forcer le type par cast? Si tu as besoin d'une opération spécifique, je ne vois pas pourquoi tu ne passes pas par les méthodes virtuelles.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    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 147
    Billets dans le blog
    4
    Par défaut
    Non je pense plutôt qu'il parle d'une fonction qui retourne un C*, pouvant être un D* dérivant de C.
    Le cas de certaines factory par exemple.
    Il est impossible de retourner une référence à ce moment-là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class C {};
    class D : public C {};
    enum TYPE_OF_CLASS { TYPE_C, TYPE_D, };
    C* createClass(TYPE_OF_CLASS t)
    {
     if (t == TYPE_C) return new C;
     if (t == TYPE_D) return new D;
    }
    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.

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Non je pense plutôt qu'il parle d'une fonction qui retourne un C*, pouvant être un D* dérivant de C.
    Le cas de certaines factory par exemple.
    Il est impossible de retourner une référence à ce moment-là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class C {};
    class D : public C {};
    enum TYPE_OF_CLASS { TYPE_C, TYPE_D, };
    C* createClass(TYPE_OF_CLASS t)
    {
     if (t == TYPE_C) return new C;
     if (t == TYPE_D) return new D;
    }
    Tout à faiit

    Il y a un troisième cas où l'utilisation des pointeurs s'avère obligatoire (même s'ils peuvent avantageusement être encapsulés dans des pointeurs intelligents) :

    C'est celui où tu veux pouvoir placer des objets polymorphes dans une collection d'objet "passant pour être" du type de base afin d'effectuer un traitement de groupe (basé, a priori, uniquement sur l'interface du type de base, évidemment )

    Les références étant des alias des données référencées, on ne peut pas créer de collection de références
    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

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

Discussions similaires

  1. pointeurs et références quoi choisir ?
    Par damien77 dans le forum C++
    Réponses: 23
    Dernier message: 11/03/2008, 21h17
  2. [Lumières] Comment choisir les lumières à activer ?
    Par bigquick dans le forum OpenGL
    Réponses: 3
    Dernier message: 30/10/2004, 01h58
  3. Association : comment choisir le sens ?
    Par 1cado dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 26/09/2004, 23h12
  4. [JSP][Tomcat] COmment choisir la place des fichiers .class?
    Par mathieu dans le forum Tomcat et TomEE
    Réponses: 16
    Dernier message: 03/03/2004, 09h24
  5. Comment choisir une langue differente de la locale?
    Par julian_ross dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/03/2004, 18h08

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