指向成员变量的指针
要访问 class
的成员,你需要具有特定实例的句柄,作为实例本身,或指针或对它的引用。给定 class
实例,如果你的语法正确,你可以使用指向成员的指针指向其各个成员! 当然,必须将指针声明为与你指向的类型相同的类型…
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()
指向成员的指针语法需要一些额外的语法元素:
- 要定义指针的类型,你需要提及基类型,以及它在类中的事实:
int Class::*ptr;
。 - 如果你有类或引用并希望将其与指向成员的指针一起使用,则需要使用
.*
运算符(类似于.
运算符)。 - 如果你有一个指向类的指针并希望将它与指向成员的指针一起使用,则需要使用
->*
运算符(类似于->
运算符)。