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

            導航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产91久久精品一区二区| 精品国产综合区久久久久久| 欧美日韩精品久久免费| 久久天天躁狠狠躁夜夜avapp| 久久久久久久精品妇女99 | 久久精品国产精品亚洲毛片 | 亚洲国产精品久久久久网站| 国产L精品国产亚洲区久久| 久久这里都是精品| 久久久久久狠狠丁香| 国内精品久久国产| 国产精品久久久久久久久久免费| 久久午夜福利无码1000合集| 久久九九有精品国产23百花影院| 久久午夜福利无码1000合集| 久久精品一区二区影院| 久久w5ww成w人免费| 麻豆av久久av盛宴av| 久久青青草原亚洲av无码| 久久午夜羞羞影院免费观看| 亚洲精品高清一二区久久| 亚洲一区中文字幕久久| 久久亚洲春色中文字幕久久久 | 久久久久久国产精品美女| 久久精品成人| 国产成人精品久久一区二区三区av | 性欧美大战久久久久久久久| 亚洲人成无码网站久久99热国产| 久久国产亚洲精品麻豆| 69SEX久久精品国产麻豆| 婷婷久久久亚洲欧洲日产国码AV| 久久综合精品国产一区二区三区 | 久久人人爽人人爽人人片AV不| 久久精品亚洲福利| 久久人人爽人爽人人爽av| 国产精品美女久久久免费| 精品久久人人妻人人做精品| 国产午夜福利精品久久| 国产A级毛片久久久精品毛片| 久久国产影院| 久久精品中文字幕大胸|