• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            xyjzsh

            指向類成員對象的指針

            定義:
            class Shape
            {
            public:
            //...
            void moveTo(Point newLocation);
            bool validate()const;
            vritual bool draw() const=0;
            //...
            }:
            class Circle: public Shape
            {
            //...
            bool draw() const;
            //...
            };

            void (Shape::*mf1)(Point ) = &Shape::moveTo;//指向類的成員函數的指針。

            ReturnType (ClassName::*pFuncName)(paramList);
            pFuncName定義了指向ClassName中的一組函數。這組函數的形式是返回值為ReturnType,函數列表為paramList.

            ClassName的限定使得只有ClassName或派生自它的類的對象才能解引用這個函數指針。

              1 #include"stdafx.h"
              2 #include<stdio.h>
              3 #include<stdlib.h>
              4 
              5 class Base;
              6 class Derived;
              7 typedef long (Base::*PFunc)(long,long);
              8 
              9 enum FuncType
             10 {
             11     ADD=1,
             12     SUB,
             13     DIV,
             14     MUL,
             15 };
             16 
             17 typedef struct tagCallBackFunc
             18 {
             19     long funcType;
             20     PFunc proc;
             21 }COMMAND,*PCOMMAND;
             22 
             23 class Base
             24 {
             25 public:
             26 
             27     virtual PCOMMAND GetCommands(void);
             28     static COMMAND command[];
             29 
             30     long base_add(long a,long b){printf("in base_add()\n");return a+b;}
             31     long base_sub(long a,long b){printf("in base_sub()\n");return a-b;}
             32     long base_div(long a,long b){printf("in base_div()\n");return a/b;}
             33     long base_mul(long a,long b){printf("in base_mul()\n");return a*b;}
             34 };
             35 
             36 COMMAND Base::command[]={
             37                        {ADD,(PFunc)&Base::base_add},
             38                        {SUB,(PFunc)&Base::base_sub},
             39                        {MUL,(PFunc)&Base::base_mul},
             40                        {DIV,(PFunc)&Base::base_div},
             41                   };
             42 PCOMMAND Base::GetCommands()
             43 {
             44     return command;
             45 }
             46 
             47 class Derived:public Base
             48 {
             49 public:
             50     Derived(void){}
             51     ~Derived(void){}
             52     virtual PCOMMAND GetCommands(void){return command;}
             53 
             54     long add(long a,long b){printf("in add()\n");return a+b;}
             55     long sub(long a,long b){printf("in sub()\n");return a-b;}
             56     long div(long a,long b){printf("in div()\n");return a/b;}
             57     long mul(long a,long b){printf("in mul()\n");return a*b;}
             58 
             59     static COMMAND command[];
             60 };
             61 
             62 COMMAND Derived::command[]=
             63                    {
             64                        {ADD,(PFunc)&Derived::add},
             65                        {SUB,(PFunc)&Derived::sub},
             66                        {MUL,(PFunc)&Derived::mul},
             67                        {DIV,(PFunc)&Derived::div},
             68                        {0}
             69                     };    
             70 
             71 
             72 
             73 void  test(Base *control,FuncType funcType,long operand1,long operand2)
             74 {
             75     PCOMMAND pCommand = control->GetCommands();
             76     PCOMMAND pNowCommand=NULL;
             77 
             78     for(long i=0;pCommand[i].funcType;++i)
             79     {
             80         if(funcType == pCommand[i].funcType)
             81         {
             82             pNowCommand = &pCommand[i]; 
             83             break;
             84         }
             85     }
             86 
             87     if(pNowCommand)
             88     {
             89         long res = (control->*pNowCommand->proc)(operand1,operand2);
             90         printf("res=%d\n",res);
             91     }
             92 }
             93 
             94 int main()
             95 {
             96     Derived *=new Derived();
             97     Base *= (Base*)d;
             98     test(b,ADD,1,2);
             99 
            100     Base *bb = new Base;
            101     test(bb,MUL,1,2);
            102     delete bb;
            103     delete d;
            104     return 0;
            105 }

            第89行是對指向類成員函數的指針的解析。

            posted on 2010-12-15 14:00 呆人 閱讀(301) 評論(0)  編輯 收藏 引用 所屬分類: 數據結構

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产午夜免费高清久久影院| 狠狠色综合久久久久尤物| 7777精品久久久大香线蕉| 久久精品国产亚洲av麻豆小说| 99re这里只有精品热久久| 久久国产影院| 7777久久亚洲中文字幕| 伊人色综合九久久天天蜜桃| 久久国产精品一国产精品金尊| 97久久精品人人澡人人爽| 久久影院综合精品| 久久无码国产| 国产成人综合久久久久久| 久久亚洲春色中文字幕久久久| 欧美激情精品久久久久久| 亚洲国产精品久久久久久| 色综合久久中文字幕无码 | 国内精品久久久久久久影视麻豆| 久久精品国产亚洲AV香蕉| 国产精久久一区二区三区| 亚洲国产成人久久精品影视| 亚洲а∨天堂久久精品9966| 国产精品岛国久久久久| 亚洲人成无码网站久久99热国产| 狠狠色丁香婷婷综合久久来| 青青草原综合久久大伊人| 性高朝久久久久久久久久| 99久久99久久精品国产| 青青草国产精品久久久久| 欧美喷潮久久久XXXXx| 无码国内精品久久综合88| 久久久久久久久久免免费精品 | 成人亚洲欧美久久久久| 久久99免费视频| 亚洲国产精品婷婷久久| 99久久精品费精品国产| 精品无码人妻久久久久久| 欧美久久亚洲精品| 无码八A片人妻少妇久久| 亚洲日韩中文无码久久| 精品综合久久久久久888蜜芽|