• <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知識點 - 多態的C實現

            示例代碼:

            /* 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 閱讀(290) 評論(0)  編輯 收藏 引用 所屬分類: R_找工復習2011

            導航

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

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            日本精品一区二区久久久| 欧美777精品久久久久网| 亚洲精品午夜国产VA久久成人| 久久久久国产| 97超级碰碰碰碰久久久久| 精品人妻久久久久久888| 无码国产69精品久久久久网站| 久久精品免费大片国产大片| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久国产三级无码一区二区| 欧美久久综合性欧美| 18岁日韩内射颜射午夜久久成人| 国产精品视频久久| 91久久香蕉国产熟女线看| 色综合久久天天综合| AAA级久久久精品无码区| 99久久精品国产一区二区| 99久久国产亚洲高清观看2024| 国产真实乱对白精彩久久| 国产毛片久久久久久国产毛片| 久久久WWW成人免费精品| 久久综合九色综合网站| 久久综合综合久久综合| 精品久久一区二区三区| 久久天天日天天操综合伊人av| 国产亚洲精品久久久久秋霞| 久久99精品国产麻豆| 99热热久久这里只有精品68| 一级做a爰片久久毛片看看| 日产精品99久久久久久| 国产精品免费久久久久影院 | 欧美激情精品久久久久久久九九九 | 久久99精品国产99久久6男男| 久久99精品久久久久久9蜜桃| 亚洲国产综合久久天堂 | www.久久精品| 久久亚洲AV成人无码| 9191精品国产免费久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 精品一二三区久久aaa片| 中文字幕一区二区三区久久网站 |