现在的位置: 首页 > 综合 > 正文

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

2013年10月21日 ⁄ 综合 ⁄ 共 956字 ⁄ 字号 评论关闭

我们都看惯了一般的函数指针,但是关于类的函数指针又是怎样的呢?它的静态函数指针和非静态函数指针是一样的么?


#include<iostream>
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<b?a:b;
	}


	static int myMin(int a,int b)
	{
		return a<b?a:b;
	}
};


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<<max(a,b)<<endl;
	/*    测试普通函数指针    */
	pMax p1=&max;
	cout<<(*p1)(a,b)<<endl;


	int (*p2)(int, int)=&max;
	cout<<(*p2)(a,b)<<endl;


	/*    测试类的非静态函数指针    */
	A TestA;
	pMin p3=&A::min;
	cout<<(TestA.*p3)(a,b)<<endl;


	int(A::*p4)(int,int)=&A::min;
	cout<<(TestA.*p4)(a,b)<<endl;
	


	/*    测试类的静态函数指针    */
	pMyMin p5=&A::myMin;
	cout<<(*p5)(a,b)<<endl;


	int(*p6)(int,int)=&A::myMin;
	cout<<(*p6)(a,b)<<endl;




	/*    测试非静态函数指针在类继承中怎么使用    */
	B TestB;
	pMinB p7=&A::min;


	cout<<(TestB.*p7)(a,b)<<endl;
	cout<<(TestB.*p3)(a,b)<<endl;
//	cout<<(TestA.*p7)(a,b)<<endl;错误
}

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

抱歉!评论已关闭.