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 !