国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C++成員函數指針的使用方法

2023-06-09 12:08:04
字體:
來源:轉載
供稿:網友

本文介紹了C++編程中成員函數指針的使用方法。成員函數的指針一般是這么用的,如下例:

class A
{
      public:
            char hello(int a){ return a-'0'; }
};

typedef char (A::*PTRFUN)(int);

int main(){
      A* obj=new A();
    PTRFUN pFun;
    pFun = A::hello; 
    obj->(*pFun)(2);
    return 0;
}

但你可能遇到這樣的情況,C++要將對象和函數指針傳遞給c,然后由c去調用,你可能會這么做:

void invokeFunc(void* obj,void* pfunc)
{
       A* class_obj=(A*)obj;
       PTRFUN pFun=(PTRFUN )pfunc;
       class_obj->(*pFun)(2);

}

int main()
{
   A* obj=new A();
   PTRFUN pFun;
   pFun = A::hello; 
   invokeFunc(obj,pFun);
}

但是你會發現編譯器會對PTRFUN pFun=(PTRFUN )pfunc;報錯,你可以這樣做:

void invokeFunc(void* obj,void* pfunc)
{
   A* class_obj=(A*)obj;
   PTRFUN* pFun2=(PTRFUN*)pfunc;
   PTRFUN pFun=*pfunc;
   class_obj->(*pFun)(2);
}

int main()
{
    A* obj=new A();
    PTRFUN pFun;
    pFun = A::hello; 
    invokeFunc(obj,&pFun);
}

也就是將一級指針轉換為2級指針,這樣編譯就不會讀void*轉成員函數指針進行報錯。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桑植县| 红安县| 西华县| 温泉县| 永丰县| 于都县| 鄢陵县| 焦作市| 大竹县| 西昌市| 海安县| 英德市| 安乡县| 黄梅县| 博湖县| 道孚县| 霍林郭勒市| 嘉祥县| 襄城县| 武山县| 咸宁市| 吉安市| 河北省| 翼城县| 阿合奇县| 泌阳县| 南靖县| 嘉祥县| 屏东县| 军事| 芒康县| 保山市| 锡林郭勒盟| 海宁市| 建平县| 望都县| 土默特左旗| 德令哈市| 尤溪县| 邹平县| 河源市|