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 éviter l'utilisation de "x->" ?


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Comment éviter l'utilisation de "x->" ?
    J'ai un code qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyClass* x = new MyClass();
    x->n = 0;
    x->run();
    x->f = x->n++;
    ...
    J'ai besoin d'appeler très souvent des membres et méthodes de l'object x.
    Je crois me souvenir qu'il est possible d'éviter d'écrire "x->" à chaque fois mais je ne me rappelle plus l'instruction (et je n'arrive pas à la retrouver).
    Quelqu'un pourrait me rafraîchir la memoire ?

  2. #2
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Essaie
    au lieu de new MyClass()....
    Les fleches c'est quand tu as un pointeur, si x est le nom de l'objet lui-meme tu as juste besoin du point.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Non mais en fait x est un des argument d'une fonction et je peux pas trop éviter d'utiliser des pointeurs.
    Mais la question c'est pas d'enlever juste la flèche et de remplacer par un point mais plutôt d'enlever le "x" aussi bien que la flèche "->".
    En gros, je voudrais que les membres de x soit accessible comme si j'étais dans la classe MyClass...

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Il existe un logiciel à ajouter à Visual Studio, si c'est l'IDE que tu utilises, c'est Virtual Assit X...
    Si tu en outilises un autre, il faut voir s'il y a des plugins ou add-in....

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut, et bienvenue sur le forum.

    Dés le moment où tu utilises un pointeur pour gérer une instance de structure ou de classe, et que tu veux accéder à un membre ou à une fonction de cette structure ou de cette classe, tu n'a pas le choix: il faut utiliser le symbole ->, c'est le langage qui veut cela...

    De la même manière, quand tu utilise une instance normale de classe (donc déclarée sous la forme de MaClass c; au lieu de MaClass *ptrc = new MaClass), il faut utiliser le symbole "." pour accéder aux membres et aux méthodes de la classe.

    Autrement, il sera impossible de déterminer si la fonction que tu appelle doit être celle qui s'applique à une variable particulière, et à laquelle.

    La seule exception, c'est quand tu implémente une méthode de la classe, et tu peux alors éviter l'usage de this->membre ou this->fonction().

    Bien sur, il t'est toujours possible de renoncer à la programmation orientée objet au profit d'une programmation plus procédurale en te limitant à la création et à l'utilisation de fonctions libres (qui ne sont pas déclarées au sein d'une structure ou d'une classe) - à l'instar de ce qui ce fait en C ou dans n'importe quel langage non "orienté objet" - mais ce sera au détriment d'une facilité de programmation ( exit la gestion polymorphique des éléments, par exemple et bonjour l'obligation de rajouter un argument en vue de passer les données nécessaires / utiles à la fonction), et cela ne te dispensera pas pour la cause d'utiliser -> ou . pour accéder aux membres de la structure.

    Evidemment, tu pourrais aussi décider de te passer de toute structure de données, mais, là encore, ce serait au prix d'une difficulté de programmation encore bien supérieure

  6. #6
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    C'est pas ça que tu cherches ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyClass* x = new MyClass();
    MyClass& xref = *x;
    xref.n = 0;
    xref.run();
    xref.f = xref.n++;
    -----

    EDIT : ah en fait tu veux carrément enlever tout appel à x ?

    EDIT2 : bien pensé Loïc .

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Une technique qui peut aider dans certains cas, c'est le chaînage. Par exemple, si ta fonction run, et toutes les autres, retourne une référence à l'objet en cours, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x.run().setN(x.getN()+1).setToto(42);

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Effectivement, on peut envisager le chainage des méthodes, mais cela ne fera que permettre de ne préciser qu'une fois la variable par succession de fonction... tout en nécessitant quand même au moins le point de liaison...

    Comme, visiblement, la demande porte sur la manière de supprimer toute référence à la variable et le point ou la flèche de liaison (j'utilise ce terme car je ne me rappelle plus du terme exact... peut etre à cause de l'heure ), la seule réponse à donner est celle que j'ai faite plus haut.

    Maintenant, on peut également conseiller de préférer le passage d'argument (car c'est bien au sujet des arguments qu'il pose la question) par référence plutôt que par pointeur

  9. #9
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    En Delphi tu as With, ca y est aussi en Visual Basic mais pas en C++ desole.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par bredelet Voir le message
    En Delphi tu as With, ca y est aussi en Visual Basic mais pas en C++ desole.
    Ah voilà, je me suis trompé de langage mais c'est exactement ce genre de syntaxe que je cherchais. Tant pis !
    Merci à tous pour votre aide néanmoins...

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il n'est pas normal que tu aies à modifier comme cela des variables membres de ta classe à l'extérieur de celle-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct MyClass
    {
        MyClass() : n(0), f(-1)
        {
        }
     
        void run()
        {
            f = n++;
        }
     
        int n;
        int f;
    };

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2009, 13h04
  2. Comment éviter l'utilisation des frames
    Par Ani[MAL] dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 21/04/2008, 16h49
  3. [SQL SERVER 2000]Comment éviter l'utilisation de curseur
    Par TiteCoCo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/04/2008, 09h13
  4. Comment éviter l'utilisation de la touche F5 ?
    Par diado dans le forum Langage
    Réponses: 3
    Dernier message: 16/02/2007, 21h23

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