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 :
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 db_str ds("test"); cout << *ds; /* t */ ds++; cout << *ds; /* e */ ds--; cout << *ds; /* t */
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 ...
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 :) */
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 !
Partager