risposta
sì, c'è. È l'operatore pointer-to-member da usare con i tipi pointer-to-member.
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
}
Qui, A
è una struct e ptr_to_memb
è un puntatore a int
membro A
. Il .*
combina un'istanza A
con un puntatore al membro per formare un'espressione di lvalue che fa riferimento al membro appropriato della data istanza A
obj
.
Il puntatore ai membri può essere un riferimento ai membri dei dati o ai membri delle funzioni e persino "fa la cosa giusta" per i membri delle funzioni virtuali.
E.g. questo programma in uscita 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;
}
si possono incontrare l'operatore quando si utilizzano i puntatori membri:
struct foo
{
void bar(void);
};
typedef void (foo::*func_ptr)(void);
func_ptr fptr = &foo::bar;
foo f;
(f.*fptr)(); // call
Anche in relazione è l'operatore di ->*
:
func_ptr fptr = &foo::bar;
foo f;
foo* fp = &f;
(fp->*fptr)(); // call
Non solo i membri _function_ puntatori. – sbi
Non è una combinazione: è davvero un singolo operatore (per §§ 2,12,5 dello standard). FWIW, '-> *' è anche un singolo operatore (stessi riferimenti). –
@sbi: Di cosa stai parlando ...? :) @Jerry: intendevo la combinazione di simboli effettivi, non combinazione di operatori. Suppongo che sia confuso. – GManNickG
- 1. Funzioni C++: commerciale e asterisco
- 2. Che cosa significa Asterisco * in Objective-C?
- 3. Il doppio asterisco ** è un operatore Javascript valido?
- 4. C# ?? operatore in Ruby?
- 5. ? (nullable) operatore in C#
- 6. Operatore esponenziale in C++
- 7. operatore sizeof() in C
- 8. Operatore ternario in C
- 9. Asterisco in pitone
- 10. C# scoping operatore
- 11. operatore [] [] C++
- 12. NON è operatore in C#
- 13. uso del: operatore in C
- 14. operatore freccia in Objective-C
- 15. Operatore di coalizzamento in C#?
- 16. operatore Implementazione <in C++
- 17. Modulo operatore in Objective C
- 18. sovraccarico -> operatore in C++
- 19. Esiste un operatore C# IN?
- 20. tipo di operatore in C
- 21. Operatore freccia (->) utilizzo in C
- 22. operatore ternario in C vs C++
- 23. sia asterisco che commerciale in un parametro C++
- 24. Il missaggio C pre/post incremento/decremento con operatore punto Objective-C funziona?
- 25. Operatore risoluzione-spazio :: operatore di accesso membro. in C#
- 26. operatore di base sovraccarico sintassi in C++
- 27. Che cos'è un operatore sovraccarico in C++?
- 28. operatore lambda C# learning
- 29. C++: Operatore di overloading =
- 30. C# a operatore sovraccarico
Potresti incollare il codice dove lo vedi? –