C++ 指向成员变量的指针

示例

要访问的成员class,您需要有一个指向特定实例的“句柄”,既可以是实例本身,也可以是指向它的指针或引用。给定一个class实例,如果语法正确,则可以使用指向成员的指针指向其各个成员!当然,必须将指针声明为与您指向的指针相同的类型。

class Class {
public:
    int x, y, z;
    char m, n, o;
}; // 类

int x;  // 全局变量

int main() {
    Class c;        // 需要一个Class实例来玩
    Class *p = &c;  // 需要一个Class指针才能玩

    int *p_i;       // 指向int的指针

    p_i = &x;       // 现在指向x
    p_i = &c.x;     // 现在指向c的x

    int Class::*p_C_i; // 指向int的指针 within Class

    p_C_i = &Class::x; // 指向任何类别中的x
    int i = c.*p_C_i;  // 使用p_c_i从c的实例中获取x
    p_C_i = &Class::y; // 指向任何类别中的y
    i = c.*p_C_i;      // 使用p_c_i从c的实例中获取y

    p_C_i = &Class::m; //错误!m是一个字符,不是整数!

    char Class::*p_C_c = &Class::m; // 更好...
} // 主要()

成员指针的语法需要一些额外的语法元素:

  • 要定义指针的类型,您需要提及基本类型,以及它在类内部的事实:int Class::*ptr;。

  • 如果您有一个类或引用,并想将其与指向成员的指针一起使用,则需要使用.*运算符(类似于.运算符)。

  • 如果您有一个指向类的指针,并想与一个指向成员的指针一起使用,则需要使用->*运算符(类似于->运算符)。