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

            A Za, A Za, Fighting...

            堅(jiān)信:勤能補(bǔ)拙

            2011知識(shí)點(diǎn) - 多態(tài)的C實(shí)現(xiàn)

            示例代碼:

            /* how to simulate C++'s polymorphism with C */
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>

            /* declaration of virtual method */
            typedef 
            void (*Func1)(void);
            typedef 
            void (*Func2)(int);
            typedef 
            void (*Func3)(char *);

            /* ------------------- Base Class begin ------------------*/
            void func1_base(void)
            {
                printf(
            "func1_base(void) called\n");
            }

            void func2_base(int item)
            {
                printf(
            "func2_base(%d) called\n", item);
            }

            struct Vtbl_Base {
                Func1 f1;
                Func2 f2;
            };
            struct Vtbl_Base bvtbl = {&func1_base, &func2_base};

            struct Base {
                
            void *vptr; /* pointer to VTABLE */
                
            int field_base;
            };

            void Base_Init(struct Base *baseint value)
            {
                
            base->vptr = &bvtbl;
                
            base->field_base = value;
            }

            /* ------------------- Base Class end ------------------*/

            /* ------------------- Derived Class begin ------------------*/
            void func1_derived(void)
            {
                printf(
            "func1_derived(void) called\n");
            }

            void func3_derived(char *item)
            {
                printf(
            "func3_derived(%s) called\n", item);
            }

            struct Vtbl_Derived {
                
            struct Vtbl_Base vtbl_base;
                Func3 f3;
            };
            struct Vtbl_Derived dvtbl = {{&func1_derived, &func2_base}, &func3_derived};

            struct Derived {
                
            struct Base base;
                
            int field_derived;
            };

            void Derived_Init(struct Derived *derived, int b, int d)
            {
                Base_Init((
            struct Base *)derived, b);
                derived
            ->base.vptr = &dvtbl;
                derived
            ->field_derived = d;
            }

            /* ------------------- Derived Class end ------------------*/

            void 
            test_polymorphism(
            struct Base *obj)
            {
                ((
            struct Vtbl_Base *)(obj->vptr))->f1();
                ((
            struct Vtbl_Base *)(obj->vptr))->f2(obj->field_base);
            }

            int
            main(
            int argc, char **argv)
            {
                
            struct Base base;
                Base_Init(
            &base128);
                test_polymorphism(
            &base);

                
            struct Derived derived;
                Derived_Init(
            &derived, 128256);
                test_polymorphism((
            struct Base *)&derived);

                ((
            struct Vtbl_Derived *)(*(int *)&derived))->f3("polymorphism");
            }

            posted on 2011-10-20 17:22 simplyzhao 閱讀(291) 評(píng)論(0)  編輯 收藏 引用 所屬分類: R_找工復(fù)習(xí)2011

            導(dǎo)航

            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            97r久久精品国产99国产精| 精品国产乱码久久久久久郑州公司 | 亚洲日韩中文无码久久| 精品人妻久久久久久888| 久久久久亚洲AV综合波多野结衣 | 久久播电影网| 奇米综合四色77777久久| 青青青青久久精品国产h| 狠狠色婷婷久久综合频道日韩| 久久午夜伦鲁片免费无码| 久久久无码精品亚洲日韩蜜臀浪潮| 国产精品久久一区二区三区| 久久精品国产99国产精品导航| 91精品国产综合久久香蕉| 久久久久久人妻无码| 亚洲综合伊人久久大杳蕉| 久久人人超碰精品CAOPOREN| 91亚洲国产成人久久精品网址| 国产精品免费看久久久| 久久精品一区二区国产| 精品久久久久久亚洲| 精品国产乱码久久久久久郑州公司 | 91久久婷婷国产综合精品青草| 天天爽天天狠久久久综合麻豆| 久久亚洲AV成人无码国产| 99久久久国产精品免费无卡顿| 久久精品国产亚洲AV无码偷窥| 成人妇女免费播放久久久| 亚洲精品国产成人99久久| 久久精品国产99久久丝袜| 伊人久久一区二区三区无码| 久久精品国产亚洲AV忘忧草18| 成人久久精品一区二区三区 | 漂亮人妻被黑人久久精品| 成人精品一区二区久久久| 国产精品久久久香蕉| 国内精品久久久久久99| 久久久久久久免费视频| 久久中文娱乐网| 亚洲AV无码久久| 色欲久久久天天天综合网精品|