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

SL & STL C++ Discussion :

Surcharge des opérateurs pour une affectation équivalente à un map


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 2
    Par défaut Surcharge des opérateurs pour une affectation équivalente à un map
    Bonjour à tous, et désolé pour le titre pas très clair.
    Alors je cherche à implémenter un système d'affectation pour une classe comparable à celui d'un map (map[var_type1]=var_type2).

    Le but final est de créer une classe avec un map comme attribut et reproduisant certains des comportements du map de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Nom_Classe {
      private :
        std::map<class1*, class2*> _map;
      public :
        Nom_Classe() {};
        virtual ~Nom_Classe() {};
        /* Fonctions me permettant d'ajouter des éléments dans le map avec la même syntaxe que si on l'utilisait directement */
    }
    qui s'utiliserait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nom_Classe c;
    class1 objet_a(args_de_construction); class2 objet_b(args_de_construction);
    c[objet_a]=objet_b;
    L'idéal serait de passer les 2 variables par référence, bien qu'ils soient stockés sous forme de pointeurs dans le map, histoire de simplifier l'utilisation.
    D'après ce que j'en ai vu en essayant de comprendre le code dans la STL, ça passe par une surcharge des operator[] et operator= de Nom_classe mais j'au eu beau essayer toutes sortes de combinaisons, tout ce que j'ai fini par récolter dans le meilleur des cas c'est un code qui compilait mais qui plantait à l'exécution.

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Samahell Voir le message
    L'idéal serait de passer les 2 variables par référence, bien qu'ils soient stockés sous forme de pointeurs dans le map, histoire de simplifier l'utilisation.
    Déjà, fait bien attention à ça, ça ne m'étonnerait pas que tes problèmes de plantage à l'exécution y soient liés.

  3. #3
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Salut, en fait c'est très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    _Tref operator[]( const key_type& _Kv )
    {
      iterator _P = insert( value_type( _Kv, _Ty() ) ).first;
      return ( (*_P).second );
    }
    L'opérateur [] fait d'abord un insert avec la clef que tu lui donnes et appelle le constructeur par defaut de l'élément mappé.

    Il te retourne alors une référence vers celui-ci pour que tu puisses lui assigner toi même une valeur.

    Moralité : se servir de cette syntaxe génère un appel au constructeur par défaut (à priori inutile) du type mappé qu'il est possible d'éviter en utilisant plutôt insert() directement.

    ça passe par une surcharge des operator[] et operator= de Nom_classe
    Pour l'operateur [] oui, mais ce n'est pas vrai pour l'operateur =.

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 10
    Dernier message: 02/12/2012, 16h50
  3. Réponses: 5
    Dernier message: 24/08/2011, 16h34
  4. Réponses: 3
    Dernier message: 02/03/2010, 08h16
  5. [C#] Format des dates pour une ComboBox...
    Par frechy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/01/2005, 17h08

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