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.