unarios significa que operadores operador logicos dev condicional asignacion c++ operator-overloading operator-arrow-star

significa - ¿Qué es el operador->*en C++?



operadores logicos en dev c++ (3)

C ++ sigue sorprendiéndome. Hoy me enteré del operador -> *. Es recargable pero no tengo idea de cómo invocarlo. Me las arreglo para sobrecargarlo en mi clase pero no tengo ni idea de cómo llamarlo.

struct B { int a; }; struct A { typedef int (A::*a_func)(void); B *p; int a,b,c; A() { a=0; } A(int bb) { b=b; c=b; } int operator + (int a) { return 2; } int operator ->* (a_func a) { return 99; } int operator ->* (int a) { return 94; } int operator * (int a) { return 2; } B* operator -> () { return p; } int ff() { return 4; } }; void main() { A a; A*p = &a; a + 2; }

editar:

Gracias a la respuesta. Para llamar a la función sobrecargada escribo

void main() { A a; A*p = &a; a + 2; a->a; A::a_func f = &A::ff; (&a->*f)(); (a->*f); //this }


Al igual que .* , ->* se utiliza con punteros a los miembros. Hay una sección completa en C ++ FAQ LITE dedicada a los punteros a los miembros.

#include <iostream> struct foo { void bar(void) { std::cout << "foo::bar" << std::endl; } void baz(void) { std::cout << "foo::baz" << std::endl; } }; int main(void) { foo *obj = new foo; void (foo::*ptr)(void); ptr = &foo::bar; (obj->*ptr)(); ptr = &foo::baz; (obj->*ptr)(); return 0; }


Como cualquier otro operador, también puedes llamarlo explícitamente:

a.operator->*(2);


El operador sobrecargado ->* es un operador binario (mientras que .* No es recargable). Se interpreta como un operador binario ordinario, por lo que en su caso original para llamar a ese operador tiene que hacer algo como:

A a; B* p = a->*2; // calls A::operator->*(int)

Lo que lea en la respuesta de Piotr se aplica a los operadores integrados , no a su sobrecargado. Lo que llama en su ejemplo agregado es también el operador incorporado , no su sobrecargado. Para llamar al operador sobrecargado, debe hacer lo que hago en mi ejemplo anterior.