->
C'est la seule vraiment difficile. Il doit être une fonction membre non statique, et il ne prend pas d'arguments. La valeur de retour est utilisé pour effectuer la recherche d'un membre.
Si la valeur de retour est un autre objet de type classe, pas un pointeur, puis par la suite la recherche de membre est également géré par un operator->
fonction. Ceci est appelé le "drill-down comportement." La langue des chaînes d'ensemble de l' operator->
des appels jusqu'à ce que le dernier retourne un pointeur.
struct client
{ int a; };
struct proxy {
client *target;
client *operator->() const
{ return target; }
};
struct proxy2 {
proxy *target;
proxy &operator->() const
{ return * target; }
};
void f() {
client x = { 3 };
proxy y = { & x };
proxy2 z = { & y };
std::cout << x.a << y->a << z->a; // print "333"
}
->*
Celui-ci est seulement difficile par le fait qu'il n'y a rien de spécial à ce sujet. Le non surchargé version nécessite un objet de pointeur de type de classe sur la gauche et un objet de pointeur de type de membre sur la droite. Mais quand vous surcharger, vous pouvez prendre tous les arguments que vous aimez et de retour tout ce que vous voulez. Il n'a même pas à être un membre non statique.
En d'autres termes, celui-ci est un opérateur binaire comme +
, -
, et /
. Voir aussi: Sont libre d'opérateur->* surcharges mal?
.*
et .
On ne peut pas être surchargé. Il y a déjà un construit-dans le sens que quand la gauche est de type classe. Peut-être qu'il ferait un peu de sens pour être en mesure de les définir pour un pointeur sur le côté gauche, mais la conception de langage comité a décidé que ce serait plus à confusion qu'utile.
La surcharge ->
, ->*
, .
, et .*
pouvez remplir uniquement dans le cas où une expression serait pas défini, il ne peut changer le sens d'une expression qui serait valable sans surcharge.