首页 新闻 搜索 专区 学院

int 类名::*pc 如此声明可见过?

0
悬赏园豆:20 [已解决问题] 解决于 2012-05-22 19:50
class A
{
public:
    int a;
    int b;
};

int A::*pc

 

像上面这样的声明,是怎样的一种声明啊,具体用法是?

十分感谢。

C++
木愚的主页 木愚 | 初学一级 | 园豆:20
提问于:2012-05-21 22:32
< >
分享
最佳答案
0

指向成员的指针。http://stackoverflow.com/questions/670734/c-pointer-to-class-data-member

收获园豆:10
Greatest | 小虾三级 |园豆:678 | 2012-05-22 13:30
其他回答(3)
0

#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;
}

收获园豆:10
星空雾雨 | 园豆:311 (菜鸟二级) | 2012-05-22 00:13

不是特别理解,这样使用,有什么特别的用途呢?

1.double A::*p 仅仅表明这个指针指向的是A中double变量?另外cout<<A::*p<<endl; 为什么编译失败呢?

2.&A::a 又是啥意思呢,在我的电脑下(XP,VS2008) 输出结果是1,&表示的是取地址。无实例化,何来地址呢?

 

十分感谢!

支持(0) 反对(0) 木愚 | 园豆:20 (初学一级) | 2012-05-22 11:24

@木愚: 

#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;
}

支持(0) 反对(0) 星空雾雨 | 园豆:311 (菜鸟二级) | 2012-05-22 15:11
0

::是域操作符,限定这个变量的作用范围。

无之无 | 园豆:5085 (大侠五级) | 2012-05-22 08:16
0

::是域操作符是说明后面的变量属于那个类的      

NathanJoy | 园豆:202 (菜鸟二级) | 2012-05-22 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册