指针,这个是 C/C++ 中最让人迷糊的东西,先上一段代码:
class Foo
{
public:
int* Value()
{
return
&Foo::val;
}
short* Flag()
{
return &Foo::flag;
}
private:
static int val;
short flag;
};
编译,有错误。一看类型不匹配。
return &Foo::flag;
// 这里提示类型不匹配
简单的改一下:return &(Foo::flag); 通过编译。可是静态的成员竟然没有问题,原因何在?
其实这里就是指针的问题,如果定义一个函数指针,指向类的成员函数,这个应该比较常用到:
typedef int* (Foo::*FUN_PTR) (void);
那么怎么定义一个指针,让他可以指向一个类的数据成员呢?搞明白了这个问题,其实就找到了这个问题的关键:
typedef short Foo::*FOO_FLAG;
FOO_FLAG pFlag = &Foo::flag;
到这里,已经可以看出来了,return &Foo::flag;其实返回的是一个指向类数据成员的指针,当然不是 int* 了,所以会类型不匹配。
而静态成员,其实是全局的。不属于类的某一个实体的。所以指向该类的全局对象(静态数据成员)和函数(静态函数)的指针,就是普通指针。
typedef int* FOO_VALUE;
FOO_VALUE pVal = &Foo::val;
所以对静态成员,这么做是可以的。
好,上完整的代码:
class Foo
{
public:
int* Value()
{
typedef int* FOO_VALUE;
FOO_VALUE pVal = &Foo::val;
return pVal;
}
short* Flag()
{
typedef short Foo::*FOO_FLAG;
FOO_FLAG pFlag = &Foo::flag;
return &(this->*pFlag);
}
static int val;
short flag;
};
PS:CU作为号称分享技术的围脖,不能直接插入源代码,很失败。
阅读(1780) | 评论(0) | 转发(0) |