Respuesta
Sí, la hay. Es el operador de puntero a miembro para usar con tipos de puntero a miembro.
E.g.
struct A
{
int a;
int b;
};
int main()
{
A obj;
int A::* ptr_to_memb = &A::b;
obj.*ptr_to_memb = 5;
ptr_to_memb = &A::a;
obj.*ptr_to_memb = 7;
// Both members of obj are now assigned
}
Aquí, A
es una estructura y ptr_to_memb
es un puntero a int
miembro del A
. El .*
combina una instancia A
con un puntero al miembro para formar una expresión lvalue que hace referencia al miembro correspondiente de la instancia A
dada obj
.
Puntero a miembros pueden ser indicadores para miembros de datos o miembros de la función e incluso 'harán lo correcto' para miembros de funciones virtuales.
E.g. este programa produce f(d) = 1
struct Base
{
virtual int DoSomething()
{
return 0;
}
};
int f(Base& b)
{
int (Base::*f)() = &Base::DoSomething;
return (b.*f)();
}
struct Derived : Base
{
virtual int DoSomething()
{
return 1;
}
};
#include <iostream>
#include <ostream>
int main()
{
Derived d;
std::cout << "f(d) = " << f(d) << '\n';
return 0;
}
puede encontrarse con que el operador cuando el uso de punteros miembros:
struct foo
{
void bar(void);
};
typedef void (foo::*func_ptr)(void);
func_ptr fptr = &foo::bar;
foo f;
(f.*fptr)(); // call
También relacionado es el operador ->*
:
func_ptr fptr = &foo::bar;
foo f;
foo* fp = &f;
(fp->*fptr)(); // call
No solo para miembros _funcion_ punteros. – sbi
No es una combinación, es realmente un solo operador (según §§ 2.12, 5.5 del estándar). FWIW, '-> *' también es un operador único (mismas referencias). –
@sbi: ¿De qué estás hablando ...? :) @Jerry: Quise decir combinación de símbolos reales, no combinación de operadores. Supongo que es confuso. – GManNickG
- 1. operador de flecha vs. operador de punto
- 2. ¿Cuál es la diferencia entre '->' (operador de flecha) y '.' (operador de punto) en Objective-C?
- 3. Colocación del asterisco en Objective-C
- 4. Funciones de C++: signo & vs asterisco
- 5. C# operador de alcance
- 6. asterisco en robots.txt
- 7. Arte de asterisco en python
- 8. Haciendo una clase de punto en C++
- 9. Mezclar C pre/post incremento/decremento con el operador de punto Objective-C funciona?
- 10. El punto de PHP es igual al operador `. =` En Javascript?
- 11. operador <en C++
- 12. Operador = sobrecarga en C++
- 13. Operador exponencial en C++
- 14. ? (anulable) operador en C#
- 15. operador sizeof() en C
- 16. NO operador en C#
- 17. C# ?? operador en Ruby?
- 18. Punteros en C: ¿cuándo usar el signo y el asterisco?
- 19. Operador de flecha (->) en C
- 20. Permitir asterisco en la URL
- 21. C++ [&] operador
- 22. Operadores de asterisco y corchetes C++ usados juntos
- 23. ¿Cuál es el punto del operador unario plus en Ruby?
- 24. operador de coma C
- 25. ¿Cuál es el punto del operador nulo en JavaScript?
- 26. Diferencia entre [corchetes] y * asterisco
- 27. cuál es la diferencia entre operador de punto y operador de resolución de alcance
- 28. C# en el operador-sobrecarga
- 29. operador módulo en C Objetivo
- 30. operador + para matrices en C++
¿Podría pegar el código donde ve esto? –