zoukankan      html  css  js  c++  java
  • C语言的OOP实践(OOC)

    OOC 面向对象 C 语言编程实践 - 文章 - 伯乐在线
    http://blog.jobbole.com/105105/

    ---硬着头皮看完了,但是感觉还是抽象有不理解的地方,感觉用C实现OOP好难啊,记得以前在上海英特尔,UEFI BIOS就是用INTEL内部封装的C实现的,IOS开发的ObjectiveC也是用的面向对象C:

    /*
     *  第一,封装
     */
    
    // 在C中可以用struct来封装数据,如果是方法,我们就需要用函数指针存放到struct里面来模拟。
    
    // 1.封装数据
    typedef struct Drawable Drawable;
    
    struct Drawable
    {
        float positionX;
        float positionY;
    };
    
    // 2.封装方法:采用函数指针存放到struct里来模拟方法的封装
    typedef struct
    {
        Drawable*   (*Create) ();
        void (*Init)    (Drawable* outDrawable);
    } _ADrawable_;
    
    extern _ADrawable_  ADrawable[1];
    
    
    /*
     *方法的具体定义 : 这里给变量分配内存和初始化
    */ 
    static void InitDrawable(Drawable* drawable)
    {
        drawable->positionX = 0.0f;
        drawable->positionY = 0.0f;
    }
    
    static Drawable* Create()
    {
        Drawable* drawable = (Drawable*) malloc(sizeof(Drawable));
        InitDrawable(drawable);
    
        return drawable;
    }
    
    // 这里的Init类似于 java中的 构造函数
    static void Init(Drawable* outDrawable)
    {
        InitDrawable(outDrawable);
    }
    
    
    // 这里 ADrawable[1] 就是一个对象,里面封装两个方法
    _ADrawable_ ADrawable[1] = {Create, Init};
    
    // 数据我们封装在Drawable结构里,通过Create可以再堆上创建需要自己free,Init是在栈上创建
    // 函数封装在ADrawable这个全局单例对象里,由于没有this指针,所有方法第一个参数需要传入操作对象
    // Create和Init方法将会管理,对象的数据初始化工作。如果对象含有其它对象,就需要调用其Create或Init方法
  • 相关阅读:
    第二章函数对象
    2013/10/24初学BOOST
    [转]delete 多表删除的使用
    vs2010配置boost编程环境(照抄并简化)
    游戏服务器修改状态标志位方法
    小思 引用和指针
    第二章:UNIX标准化及实现
    const指针
    第一章:UNIX基础知识
    基础算法——位运算
  • 原文地址:https://www.cnblogs.com/bluestorm/p/5830941.html
Copyright © 2011-2022 走看看