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 ? :koi:*/
Maintenant, j'essaie de faire une surcharge d'opérateur qui a pour but de marcher comme les pointeurs.
Exemple :
Code:
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:
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 ! ;)