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