类函数指针和普通函数指针

2014-11-24 00:59:29 · 作者: · 浏览: 3
我们都看惯了一般的函数指针,但是关于类的函数指针又是怎样的呢?它的静态函数指针和非静态函数指针是一样的么?
#include  
using namespace std;  
  
  
typedef int(*pMax)(int,int);//普通函数指针  
  
  
int max(int a,int b)  
{  
  return a>b a:b;  
}  
  
  
class A  
{  
public:  
  int min(int a,int b)  
  {  
      return a  }  
  
  
  static int myMin(int a,int b)  
  {  
      return a  }  
};  
  
  
class B:public A  
{  
  
  
};  
typedef int (A::*pMin)(int,int);//类的非静态函数指针  
typedef int (*pMyMin)(int,int);//类的静态函数指针  
  
  
typedef int (B::*pMinB)(int,int);//类的非静态函数指针  
  
  
void main()  
{  
  int a=3;  
  int b=4;  
    
  cout<  /*    测试普通函数指针    */  
  pMax p1=&max;  
  cout<<(*p1)(a,b)<
int (*p2)(int, int)=&max; cout<<(*p2)(a,b)< /* 测试类的非静态函数指针 */ A TestA; pMin p3=&A::min; cout<<(TestA.*p3)(a,b)< int(A::*p4)(int,int)=&A::min; cout<<(TestA.*p4)(a,b)< /* 测试类的静态函数指针 */ pMyMin p5=&A::myMin; cout<<(*p5)(a,b)< int(*p6)(int,int)=&A::myMin; cout<<(*p6)(a,b)< /* 测试非静态函数指针在类继承中怎么使用 */ B TestB; pMinB p7=&A::min; cout<<(TestB.*p7)(a,b)< cout<<(TestB.*p3)(a,b)< cout<<(TestA.*p7)(a,b)<

从中可以看出,父类对象不可以调用以子类声明的函数指针,而子类对象可以调用以父类声明的函数指针。