C++ Surcharge de l'opérateur d'accès aux membres de classe ->
Surcharge des opérateurs et surcharge des fonctions en C++
L'opérateur d'accès aux membres de classe (->) peut être surchargé, mais c'est plutôt problématique. Il est défini pour donner à une classe un comportement de « pointeur ». L'opérateur -> doit être une fonction membre. Si l'opérateur -> est utilisé, le type de retour doit être un pointeur ou un objet de classe.
L'opérateur -> est généralement utilisé en combinaison avec l'opérateur de déréférencement de pointeur * pour implémenter la fonctionnalité de « pointeur intelligent ». Ces pointeurs sont des objets qui se comportent comme des pointeurs normaux, sauf que lorsque vous accédez à un objet via le pointeur, ils effectuent d'autres tâches. Par exemple, lorsque le pointeur est détruit, ou lorsque le pointeur pointe vers un autre objet, l'objet est automatiquement supprimé.
L'opérateur de déréférencement -> peut être défini comme un opérateur unaire postfixe. C'est-à-dire, étant donné une classe :
class Ptr{
//...
X * operator->();
};
ClassPtrLes objets peuvent être utilisés pour accéder aux classes.XSes membres sont utilisés d'une manière très similaire aux pointeurs. Par exemple :
void f(Ptr p )
{
p->m = 10 ; // (p.operator->())->m = 10
}
L'instruction p->m est interprétée comme (p.operator->())->m. De même, l'exemple suivant montre comment surcharger l'opérateur d'accès aux membres de classe ->.
Exemple
Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :
10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21autres extensions