C++ Sobrecarga del operador de acceso a miembros de clase ->
Sobrecarga de operadores y funciones en C++
El operador de acceso a miembros de clase (->) puede sobrecargarse, pero es bastante complicado. Está definido para otorgar a una clase un comportamiento de "puntero". El operador -> debe ser una función miembro. Si se utiliza el operador ->, el tipo de retorno debe ser un puntero o un objeto de la clase.
El operador -> generalmente se combina con el operador de desreferencia de punteros * para implementar la funcionalidad de los "punteros inteligentes". Estos punteros son objetos cuyo comportamiento es similar al de los punteros normales, con la única diferencia de que ejecutan otras tareas cuando se accede a un objeto a través del puntero. Por ejemplo, cuando el puntero se destruye, o cuando el puntero apunta a otro objeto, el objeto se elimina automáticamente.
El operador de desreferencia -> puede definirse como un operador unario sufijo. Es decir, dada una clase:
class Ptr{
//...
X * operator->();
};
ClasePtrEl objeto de... puede usarse para acceder a la claseXde los miembros, con un uso muy similar al de los punteros. Por ejemplo:
void f(Ptr p )
{
p->m = 10 ; // (p.operator->())->m = 10
}
La sentencia p->m se interpreta como (p.operator->())->m. De manera similar, el siguiente ejemplo demuestra cómo sobrecargar el operador de acceso a miembros de clase ->.
Ejemplos
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
10 12 11 13 12 14 13 15 14 16 15 17 16 18 17 19 18 20 19 21Otras extensiones