日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一般函数指针和类(非MFC)的成员函数指针

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一般函数指针和类(非MFC)的成员函数指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數指針是通過指向函數的指針間接調用函數。函數指針可以實現對參數類型、參數順序、返回值都相同的函數進行封裝,是多態的一種實現方式。由于類的非靜態成員函數中有一個隱形的this指針,因此,類的成員函數的指針和一般函數的指針的表現形式不一樣。

1、指向一般函數的指針

函數指針的聲明中就包括了函數的參數類型、順序和返回值,只能把相匹配的函數地址賦值給函數指針。為了封裝同類型的函數,可以把函數指針作為通用接口函數的參數,并通過函數指針來間接調用所封裝的函數。

下面是一個指向函數的指針使用的例子。

#include <iostream.h>

/*指向函數的指針*/
typedef int (*pFun)(int, int);

int Max(int a, int b)
{
return a > b ? a : b;
}

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

/*通用接口函數,實現對其他函數的封裝*/
int Result(pFun fun, int a, int b)
{
return (*fun)(a, b);
}

void main()
{
int a = 3;
int b = 4;

cout<<"Test function pointer: "<<endl;
cout<<"The maximum number between a and b is "<<Result(Max, a, b)<<endl;
cout<<"The minimum number between a and b is "<<Result(Min, a, b)<<endl;
}

?

2、指向類的成員函數的指針

類的靜態成員函數采用與一般函數指針相同的調用方式,而受this指針的影響,類的非靜態成員函數與一般函數指針是不兼容的。而且,不同類的this指針是不一樣的,因此,指向不同類的非靜態成員函數的指針也是不兼容的。指向類的非靜態成員函數的指針,在聲明時就需要添加類名。

下面是一個指向類的成員函數的指針的使用的例子,包括指向靜態和非靜態成員函數的指針的使用。

#include <iostream.h>

class CA;

/*指向類的非靜態成員函數的指針*/
typedef int (CA::*pClassFun)(int, int);

/*指向一般函數的指針*/
typedef int (*pGeneralFun)(int, int);

class CA
{
public:

int Max(int a, int b)
{
return a > b ? a : b;
}

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

static int Sum(int a, int b)
{
return a + b;
}

/*類內部的接口函數,實現對類的非靜態成員函數的封裝*/
int Result(pClassFun fun, int a, int b)
{
return (this->*fun)(a, b);
}

};

/*類外部的接口函數,實現對類的非靜態成員函數的封裝*/
int Result(CA* pA, pClassFun fun, int a, int b)
{
return (pA->*fun)(a, b);
}

/*類外部的接口函數,實現對類的靜態成員函數的封裝*/
int GeneralResult(pGeneralFun fun, int a, int b)
{
return (*fun)(a, b);
}


void main()
{
CA ca;
int a = 3;
int b = 4;

cout<<"Test nonstatic member function pointer from member function:"<<endl;
cout<<"The maximum number between a and b is "<<ca.Result(CA::Max, a, b)<<endl;
cout<<"The minimum number between a and b is "<<ca.Result(CA::Min, a, b)<<endl;

cout<<endl;
cout<<"Test nonstatic member function pointer from external function:"<<endl;
cout<<"The maximum number between a and b is "<<Result(&ca, CA::Max, a, b)<<endl;
cout<<"The minimum number between a and b is "<<Result(&ca, CA::Min, a, b)<<endl;

cout<<endl;
cout<<"Test static member function pointer: "<<endl;
cout<<"The sum of a and b is "<<GeneralResult(CA::Sum, a, b)<<endl;
} <Artcle from : http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html>

轉載于:https://www.cnblogs.com/MMLoveMeMM/articles/3079524.html

總結

以上是生活随笔為你收集整理的一般函数指针和类(非MFC)的成员函数指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。