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 :

Retourner l'objet en cours (return this)


Sujet :

C++

  1. #1
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut Retourner l'objet en cours (return this)
    Bonsoir,

    Au lieu d'utiliser une méthode qui ne retourne rien (void), je souhaiterais créer une méthode qui retourne l'objet en cours.

    Voici un exemple en Java :
    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
    class Test{
       private val;
     
       public Test(){ 
          val = 0; 
       }
     
       public int getVal(){
          return val;
       }
     
       public Test ajoute(int a){
          val += a;
          return this;
       }
    }
     
    /* DANS LE MAIN */
     
    void main(String[] args){
       Test obj1 = new Test(); // obj1.getVal() = 0
       Test obj2 = obj1.ajoute(1).ajoute(2); // obj1.getVal() et obj2.getVal() = 3
       obj1.ajoute(997);
       // obj1.getVal() et obj2.getVal() = 1000
    }

    Je souhaiterais donc recréer l'exemple du dessus en C++ sans avoir à utiliser la surcharge des opérateurs (operator).

    Voici ma classe C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Test
    {
    public:
        Test(int a = 0);
        int getVal();
        Test& ajouter(int a);
     
    private:
        int val;  
    };
    La définition de mes méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Test::Test(int a) : val(a)
    {}
     
    int Test::getVal()
    {
       return val;
    }
     
    Test& Test::ajoute(int a)
    {
        val += a;
        return *this;
    }
    L'exemple avec la méthode ajoute() que j'ai choisis est simple (démonstration), cela aurait pu être une méthode beaucoup plus complexe, l'idée est juste de retourner l'objet en cours une fois avoir travaillé dans la méthode.
    Je souhaiterais vous demander si la syntaxe de ma classe et de la définition de mes méthodes respectent les normes du C++[/COLOR].


    Je vous remercie
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #2
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Oui, c'est la syntaxe que l'on retrouve dans beaucoup d'opérateurs ou pour les techniques de function chaining
    Bien sur, d'un point de vue syntaxique, c'est probablement les opérateurs + ou << qui correspondent le plus

  3. #3
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Oui, je souhaiterais faire du function chaining.
    Donc si je comprends bien ma syntaxe C++ est juste.

    Je vous remercie pour votre confirmation, je mets le sujet en résolu
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  4. #4
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Boost intègre aussi une solution plus élégante à utiliser, qui triche avec les operator : (implémentation personnelle non tirée de boost)
    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
    class Test;
    class TestAdder {
      Test * t_;
    public:
      TestAdder(Test * t) : t_(t) { }
      TestAdder & operator () (int i);
    };
    class Test {
      std::vector<int> v_;
      friend class TestAdder;
     
    public:
      TestAdder ajouter;
     
      Test() : ajouter(this) { }
     
      int first() { return v_.size() == 0 ? -1 : v_[0]; } // Juste pour faire joli
    };
    TestAdder & TestAdder::operator () (int i) {
      t_->v_.push_back(i);
      return *this;
    }
    // Utilisation :
    Test t;
    t.ajouter(1)(2)(5)(42)(1337);
    std::cout << t.first() << std::endl; // 1
    Et pour bien se former les cours et tutoriels pour apprendre C++ : https://cpp.developpez.com/cours/

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

Discussions similaires

  1. [Débutant] Fonction qui retourne un objet (classe)
    Par in dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/08/2007, 09h32
  2. Serialisation/deserialisation d'un arrayList retourne des objets vides
    Par cdtkoenig dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/07/2007, 15h45
  3. Réponses: 4
    Dernier message: 16/01/2007, 13h42
  4. [1.1] Comment lister l'ensemble des instance d'objets en cours ?
    Par maitrebn dans le forum Framework .NET
    Réponses: 2
    Dernier message: 25/09/2006, 13h48
  5. Problème Corba retourner un objet
    Par stephane92400 dans le forum Général Java
    Réponses: 17
    Dernier message: 07/06/2006, 09h37

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