• <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 閱讀(304) 評(píng)論(0)  編輯 收藏 引用 所屬分類: R_找工復(fù)習(xí)2011

            導(dǎo)航

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

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久精品无码一区二区app| 激情综合色综合久久综合| 久久精品亚洲男人的天堂| 亚洲精品乱码久久久久久中文字幕 | 精品国产综合区久久久久久 | 久久久久亚洲AV成人片 | 精品国产日韩久久亚洲| 久久精品国产亚洲欧美| 久久久久久久久久久精品尤物 | 一本一道久久a久久精品综合| 久久精品无码一区二区无码| 色婷婷久久综合中文久久一本| 久久精品国产亚洲AV电影| 久久99这里只有精品国产| 国产99久久久国产精品~~牛| 久久久久亚洲av无码专区喷水| 久久无码AV中文出轨人妻| 18岁日韩内射颜射午夜久久成人| 亚洲va中文字幕无码久久不卡| 久久久久亚洲精品天堂久久久久久| AV无码久久久久不卡蜜桃| 久久中文骚妇内射| 亚洲国产精品无码久久SM| 九九精品久久久久久噜噜| 午夜精品久久久久久影视777| 精品久久久久国产免费| 久久精品亚洲精品国产欧美| 久久精品国产清自在天天线| 国产99久久九九精品无码| AA级片免费看视频久久| 狠狠色丁香婷婷综合久久来来去| 国产精品欧美久久久久天天影视 | 大蕉久久伊人中文字幕| 中文字幕一区二区三区久久网站| 好久久免费视频高清| 国产亚洲精品美女久久久| 91精品国产高清久久久久久91| 国产精品嫩草影院久久| 狠狠色丁香婷婷久久综合五月| 97精品依人久久久大香线蕉97|