class A { public: int a; int b; }; int A::*pc
像上面这样的声明,是怎样的一种声明啊,具体用法是?
十分感谢。
指向成员的指针。http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member
#include<iostream>
using namespace std;
class A
{
public:
int a;
double b;
};
int main(){
double A::*p=&A::b;
cout<<&A::a<<endl;
return 0;
}
不是特别理解,这样使用,有什么特别的用途呢?
1.double A::*p 仅仅表明这个指针指向的是A中double变量?另外cout<<A::*p<<endl; 为什么编译失败呢?
2.&A::a 又是啥意思呢,在我的电脑下(XP,VS2008) 输出结果是1,&表示的是取地址。无实例化,何来地址呢?
十分感谢!
@木愚:
#include<iostream>
using namespace std;
class A
{
public:
int a;//member
int b;//member
double sort(){//function member
cout<<"called"<<endl;
return 0;
}
};
int main(){
A a;
double (A::*p)();//class object function pointer
p=A::sort;//point function
cout<<(a.*p)()<<endl;//call function
a.b=100;
int A::*t=&A::b;//class object member pointer
cout<<(a.*t)<<endl;
return 0;
}
::是域操作符,限定这个变量的作用范围。
::是域操作符是说明后面的变量属于那个类的