Pointers to member variables
suggest changeTo access a member of a class
, you need to have a “handle” to the particular instance, as either the instance itself, or a pointer or reference to it. Given a class
instance, you can point to various of its members with a pointer-to-member, IF you get the syntax correct! Of course, the pointer has to be declared to be of the same type as what you are pointing to…
class Class {
public:
int x, y, z;
char m, n, o;
}; // Class
int x; // Global variable
int main() {
Class c; // Need a Class instance to play with
Class *p = &c; // Need a Class pointer to play with
int *p_i; // Pointer to an int
p_i = &x; // Now pointing to x
p_i = &c.x; // Now pointing to c's x
int Class::*p_C_i; // Pointer to an int within Class
p_C_i = &Class::x; // Point to x within any Class
int i = c.*p_C_i; // Use p_c_i to fetch x from c's instance
p_C_i = &Class::y; // Point to y within any Class
i = c.*p_C_i; // Use p_c_i to fetch y from c's instance
p_C_i = &Class::m; // ERROR! m is a char, not an int!
char Class::*p_C_c = &Class::m; // That's better...
} // main()
The syntax of pointer-to-member requires some extra syntactic elements:
- To define the type of the pointer, you need to mention the base type, as well as the fact that it is inside a class:
int Class::*ptr;
. - If you have a class or reference and want to use it with a pointer-to-member, you need to use the
.*
operator (akin to the.
operator). - If you have a pointer to a class and want to use it with a pointer-to-member, you need to use the
->*
operator (akin to the->
operator).
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents