当我面对
时,我正在阅读基本的C ++教程::*
在以下代码中。我可以知道那是什么:
class A {
public:
protected:
int i;
};
class B : public A {
friend void f(A*, B*);
void g(A*);
};
void f(A* pa, B* pb) {
// pa->i = 1;
pb->i = 2;
// int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void B::g(A* pa) {
// pa->i = 1;
i = 2;
// int A::* point_i = &A::i;
int A::* point_i2 = &B::i;
}
void h(A* pa, B* pb) {
// pa->i = 1;
// pb->i = 2;
}
int main() { }
基于我迄今为止的C ++知识,我无法理解像
这样的东西int A::* point_i2
你可以帮帮我吗?
谢谢。
答案 0 :(得分:8)
point_i2
是指向成员的指针。这意味着它指向在类int
中声明的A
成员变量。
答案 1 :(得分:3)
int A::* point_i2 = &B::i;
在您拥有随机A
或B
对象后,您可以访问point_i2
指向的成员
B b;
b.*point_i2 = ...;
在point_i2
的上述初始化之后,这将改变b.i
。
考虑ClassName::*
的方式与您对&
和*
的看法相同:它只是另一个“指针/引用类工具”,您可以在声明中使用它来指定事物你宣布将会是。