• <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)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品国产乱码久久久久久郑州公司| 99久久国产热无码精品免费 | 国产成人无码精品久久久免费 | 国内精品欧美久久精品| 久久伊人中文无码| 欧美一区二区三区久久综| 国产精品内射久久久久欢欢| 亚洲女久久久噜噜噜熟女| 91亚洲国产成人久久精品网址| 伊人久久一区二区三区无码| 999久久久无码国产精品| 思思久久99热免费精品6| 久久久久久亚洲精品成人| 欧美久久久久久午夜精品| 久久综合久久自在自线精品自| 99久久国产综合精品网成人影院| 久久婷婷五月综合成人D啪 | 久久九九有精品国产23百花影院| 一97日本道伊人久久综合影院| 日韩精品久久久久久| 国产精品9999久久久久| 中文字幕无码精品亚洲资源网久久| 91久久精品国产91性色也| 人妻无码中文久久久久专区| 久久丝袜精品中文字幕| 狠狠久久综合| 91久久香蕉国产熟女线看| 久久精品国产91久久综合麻豆自制| 久久综合给合久久国产免费| 香蕉久久夜色精品国产尤物| 看全色黄大色大片免费久久久| 夜夜亚洲天天久久| 久久噜噜电影你懂的| 久久精品国产免费一区| 久久国产精品99精品国产987| 精品久久久久香蕉网| 久久久久人妻精品一区二区三区 | 性做久久久久久久久浪潮| 亚洲综合久久夜AV | 丁香色欲久久久久久综合网| 无码国内精品久久综合88|