指向成員變數的指標

要訪問 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;
  • 如果你有類或引用並希望將其與指向成員的指標一起使用,則需要使用 .*運算子(類似於 . 運算子)。
  • 如果你有一個指向類的指標並希望將它與指向成員的指標一起使用,則需要使用 ->*運算子(類似於 -> 運算子)。