什么是C ++中的:: *

时间:2012-03-30 08:18:23

标签: c++

当我面对

时,我正在阅读基本的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
你可以帮帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:8)

point_i2是指向成员的指针。这意味着它指向在类int中声明的A成员变量。

答案 1 :(得分:3)

int A::* point_i2 = &B::i;

在您拥有随机AB对象后,您可以访问point_i2指向的成员

B b;
b.*point_i2 = ...;

point_i2的上述初始化之后,这将改变b.i

考虑ClassName::*的方式与您对&*的看法相同:它只是另一个“指针/引用类工具”,您可以在声明中使用它来指定事物你宣布将会是。