1.关于声明形式为CLASS::*MEMBER的用法。
看下面例子:
#include<iostream>
using namespace std;class A{
public:
A(int c):b(c){}
int b;
};
void fun(A a,int A::*b){
cout<<a.*b<<endl;
}
int main(){
A a(2);
fun(a,&A::b);
return 0;
}
运行结果是2。
假如在程序中有一个声明形式为A::*b的语句,该怎么理解:
应该是理解成A中成员b的一个指针。A中有一个int b成员,但是该成员并不是指针类型的,为了特指A中b的一个指针类型,所以应该用int A::*b的声明形式,这样子声明之后,在给该声明传值时,应该写成&A::b,并且为了能够引用该值,还应该传一个参数A a,如上面程序所示。
为什么在声明时不直接写成int *A::b,很显然,这样子表示A中有一个int*类型的b,显然是错误的,所以,为了表示类中某个成员的指针,一般声明成CLASS::*MEMBER的形式。