首先看我从网上引用的东西:
“指向数据成员的指针格式如下:
<类型说明符><类名>::*<指针名>
指向成员函数的指针格式如下:
<类型说明符>(<类名>::*<指针名>)(<参数表>)
例如,设有如下一个类A:
class A
{
public:
int fun (int b) { return a*c+b; }
A(int i) { a=i; }
int c;
private:
int a;
};
定义一个指向类A的数据成员c的指针pc,其格式如下:
int A:: *pc = &A::c;
再定义一个指向类A的成员函数fun的指针pfun,其格式如下:
int (A:: *pfun)(int) = A::fun;
”
/////////////////////////////////////////////////////////////////////////////////
(在书上看到这些类似的东西,比较纳闷,于是就在网上找到了那篇东西~以下是我自己写的程序,在VC6下通过得了编译,但是在DEV-Cpp下又不行~~非常郁闷~)
#include <iostream>
using namespace std;
class A
{
public:
virtual void f()
{
cout << "A::f was called" << endl;
}
};
class B:public A
{
public:
virtual void f()
{
cout << "B::f was called" << endl;
}
};
int main()
{
B b;
void (A::*pf)()=A::f;
(b.*pf)();
cin.get();
return 0;
}
有了指针,还必须通过一个具体的类来引用!因为引用的不是一个具体的对象.所以pf并没有一个确切的地址.而是一个对象内相对的一个地址.在成员函数前面都加上staic,那就可以作为普通函数指针来处理