zoukankan      html  css  js  c++  java
  • 动态对象绑定

    参考链接:  http://www.jb51.net/article/82718.htm

    C实现结构体对象的动态绑定

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    typedef struct bird{
         void (*fly)(void);
         void (*type)(struct bird*);
    }BIRD;
    
    typedef struct parrot{
        BIRD obj;
        void (*fly)(void);
    }PARROT;
    
    typedef struct eagle
    {   
        int type;
        BIRD obj;
        void (*fly)(void);  
    }EAGLE;
    
    
    void parrot_type(struct bird *bird)
    {
        struct parrot *parrot = (struct parrot*)((char*)bird-(char*)&(((struct parrot*)0)->obj) );
        if(parrot->fly != NULL) {
            bird->fly = parrot->fly;
        }
    }
    
    
    
    void fly() {
        printf("flying
    ");
    }
    
    void eagle_fly(){
        printf("eagle fly
    ");
    }
    
    void parrot_fly() {
        printf("parrot fly
    ");
    }
    
    
    void init_fly(BIRD *pBird) {
        memset(pBird,0, sizeof(BIRD));
        pBird->fly = fly;
    
    }
    
    void start_fly(BIRD *pBird) {
    
         pBird->type(pBird);
         pBird->fly();
    }
    
    int main(int argc, char const *argv[])
    {
        
        BIRD bird;
        init_fly(&bird);
        
        PARROT parrot;
        parrot.fly = parrot_fly;
        parrot.obj = bird;
        parrot.obj.type = parrot_type;
    
        start_fly(&parrot.obj);
    
    
    
    
        return 0;
    }
  • 相关阅读:
    0302 随想
    1231递归下降语法分析程序设计
    《构建之法》1、2、3章读后感
    复利计算总结
    操作系统实验0
    学习进度条
    0302思考并回答一些问题
    评论
    c语言文法
    词法分析
  • 原文地址:https://www.cnblogs.com/hzijone/p/8329248.html
Copyright © 2011-2022 走看看