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

            堅信:勤能補拙

            2011知識點 - 多態(tài)的C實現(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 閱讀(293) 評論(0)  編輯 收藏 引用 所屬分類: R_找工復(fù)習2011

            導航

            <2011年10月>
            2526272829301
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久高潮综合影院| 99精品久久精品一区二区| 99久久人妻无码精品系列| 国产精品久久国产精品99盘| 伊人久久大香线蕉影院95| 99久久免费国产精品特黄| 久久精品国产亚洲一区二区| 久久久久99这里有精品10| 丁香狠狠色婷婷久久综合| 精品免费久久久久国产一区| 久久亚洲中文字幕精品有坂深雪| 久久国产三级无码一区二区 | 国产精品久久新婚兰兰| 久久精品国产99久久久| 欧美日韩精品久久久免费观看| 久久A级毛片免费观看| 亚洲美日韩Av中文字幕无码久久久妻妇| 国产精品久久网| 久久婷婷午色综合夜啪| 国产高清国内精品福利99久久| 久久精品九九亚洲精品天堂| 亚洲国产精品一区二区三区久久| 丰满少妇人妻久久久久久| 精品一二三区久久aaa片| 久久综合色区| 色青青草原桃花久久综合| 国产99久久九九精品无码| 久久久久免费看成人影片| 久久久久久久91精品免费观看| 久久免费99精品国产自在现线| 国内精品久久久久久野外| 久久ww精品w免费人成| 久久久无码精品亚洲日韩按摩 | 91视频国产91久久久| 亚洲精品白浆高清久久久久久| 99精品国产综合久久久久五月天| 手机看片久久高清国产日韩| 亚洲中文字幕伊人久久无码| 狠狠色综合网站久久久久久久 | 伊人久久国产免费观看视频| 久久久久久亚洲精品不卡|