指向成员变量的指针

要访问 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;
  • 如果你有类或引用并希望将其与指向成员的指针一起使用,则需要使用 .*运算符(类似于 . 运算符)。
  • 如果你有一个指向类的指针并希望将它与指向成员的指针一起使用,则需要使用 ->*运算符(类似于 -> 运算符)。