普通指针
可以声明指向对象和函数的指针。这都司空见惯了,无需多说,举出一下例子即可
Object o;
Object *pO = &o;
int (*pf)() = NULL;
int func1();
int func2();
pf = func1;
pf = func2;
类指针(确切地说应该是指向类数据成员和成员函数的指针)
先定义一个类
class CTest
{
public:
int m_iVal;
int fun1();
}ok,像上面一样,声明指针
int *pI = NULL;
int (*pf)() = NULL;
再给指针赋值
pI = &CTest::m_iVal;
pf = CTest::fun1();
此刻会发现编译器发生了错误。why?原来普通的对象和类的对象成员、普通函数和累的成员函数之间最重要的区别是后者有前者不具有的属性——它的类。这就决定了指向对象成员和成员函数的指针必须要有限定的类型,如上面的pI应该是“指向CTest类中int变量的指针”,而非“指向int变量的指针”,同理,pf应该是“指向CTest类中类似func1函数的指针”,而非“类似func1函数的指针”(这里的“类似”指的是返回值、参数类型和个数皆一致)。
因此pI 和pf需重新声明,如下
int CTest:: *pI;
int (CTest:: *pf)();