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 :

Surcharger l'opérateur de déréférencement *


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Surcharger l'opérateur de déréférencement *
    Bonjour !

    Depuis quelques temps je code une classe de chaines de caractères assez complète.
    /* Désolé pour les ^ à chaine, comment on fait les i circonflexe sous Gnome ? */

    Maintenant, j'essaie de faire une surcharge d'opérateur qui a pour but de marcher comme les pointeurs.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    db_str ds("test");
    cout << *ds; /* t */
    ds++;
    cout << *ds; /* e */
    ds--;
    cout << *ds; /* t */
    Avec l'élément privé deref_count dans ma classe, de type unsigned int :
    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
     
    db_str db_str::operator++() {
         deref_count++;
         return *this;
    }
     
    db_str db_str::operator--() {
         deref_count--;
         return *this;
    }
     
    char db_str::operator*() {
         db_str temp = *this;
         return temp[deref_count];
    }
     
    char db_str::operator*() const {
         db_str temp = *this;
         return temp[deref_count];
    } /* P'tite précision pour la route : l'opérateur [] est bien surchargé et fonctionne comme sur les std::string :) */
    Seulement, ce qui se complique c'est que * est traité également comme l'opérateur de déréférencement lors de la déclaration d'un pointeur, l'utilisateur qui veut donc faire une déclaration de db_str* l'a dans l'os et c'est surtout l'opérateur de multiplication ...
    Je voudrais donc que l'on m'explique comment surcharger l'opérateur de déréférencement sans surcharger la multiplication ou la déclaration d'un db_str*.

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Citation Envoyé par Shydow Voir le message
    Je voudrais donc que l'on m'explique comment surcharger l'opérateur de déréférencement sans surcharger la multiplication ou la déclaration d'un db_str*.
    Comme pour un type standard, ton opérateur '*' s'applique sur un objet et pas sur un pointeur de l'objet. Tu dois déréférencer ton pointeur avant d'utiliser ta surcharge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int *pi = new int(0);
    (*pi)++;
    (*pi) = 2 * (*pi);
    Idem pour ton type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    db_str *p_str = new db_str;
    std::cout<< *(*p_str);
    (*p_str)++;
    std::cout<<*(*p_str);
    Il existe une autre écriture, mais tu vas remarquer qu'elle est peu ... utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    db_str *p_str = new db_str;
    std::cout<< p_str->operator*();
    p_str->operator++();
    std::cout<<p_str->operator*();

Discussions similaires

  1. [C#] Tri d'objet et surcharge d'opérateur
    Par Royd938 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/12/2007, 00h26
  2. Petit probléme de surcharge d'opérateur .
    Par Clad3 dans le forum C++
    Réponses: 20
    Dernier message: 11/04/2005, 20h15
  3. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01
  4. Cumul de surcharges d'opérateurs
    Par Nats dans le forum C++
    Réponses: 2
    Dernier message: 11/10/2004, 13h37
  5. [VB .NET] Surcharge d'opérateur
    Par Franckintosh dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/09/2004, 19h05

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