什么是::*在C+中+;? 当我面对时,我正在阅读一个基本的C++教程。 ::*

什么是::*在C+中+;? 当我面对时,我正在阅读一个基本的C++教程。 ::*,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;

在下面的代码中。我可以知道那是什么吗

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
之后,当您有一个随机
a
B
对象时,您可以访问
点2
指向的成员

B b;
b.*point_i2 = ...;
在上述
点_i2
初始化之后,这将更改
b.i


想一想
类名::*
就像你想
&
*
一样:它只是另一个“类似指针/引用的工具”,你可以在声明中使用它来指定你要声明的东西。

point\u i2
是一个指向成员的指针。这意味着它指向一个
int
成员变量,该变量在类
A

中声明,那么这像“成员类指针”吗?就像方法类指针一样?简单地说。指向类成员的指针。@Gui什么是方法类指针?你的意思是
函数类型A::*
?是的,它们是一样的。指向数据成员的指针的成员类型为对象类型,而指向成员函数的指针的成员类型为函数类型。从语法上讲,您还可以对函数类型使用函数声明符语法,使其看起来像
R(A::*)(参数)cv qual ref qual,spec除外
。虽然如果你不熟悉C++语法,使用别名模板和写<代码>别名A::*更容易。没有“基本”C++任何东西都应该覆盖成员指针。你有那个教程的链接吗?@Nicolas可能不是很基础:)
B b;
b.*point_i2 = ...;