精华内容
下载资源
问答
  • C 面向对象程序设计

    2012-07-12 23:09:52
    C 面向对象程序设计  运行时动态绑定一直以来都是面向对象的优势,比如C++\JAVA等面向对象编程语言都有这种特性。  但是,其实C语言也可以有这样的优势。在C语言要实现这种方式,需要利用结构体、以及结构体的...

                                                                      C 面向对象程序设计

         运行时动态绑定一直以来都是面向对象的优势,比如C++\JAVA等面向对象编程语言都有这种特性。

         但是,其实C语言也可以有这样的优势。在C语言要实现这种方式,需要利用结构体、以及结构体的操作函数表。

         然后再利用工厂模式、或者桥模式,在程序运行时动态绑定。

         例子如下:

          typedef struct person person_t;
          typedef struct person_opt person_opt_t;
          struct person
          {
        void *data;
        person_opt_t *opt;
          };


          struct person_opt
          {
       void (*say)(person_t *p);
       void (*walk)(person_t *p);
          };

    struct person_opt teacher_opt;
    struct person_opt student_opt;


    person *create_person(int type)
    {
    person *p = (person *)malloc(sizeof(person));
    if(type == 0)
    {
    p->opt = &teacher_opt;
    }else
    {
    p->opt = &student_opt;
    }
    }


    展开全文
  • C面向对象-构建对象

    2017-07-09 16:00:14
    一组松散的变量是比较难追踪的,所以一般采用结构体将其封装起来struct{ tBoolean logOn; static enum eLogLevel ouputLevel[NUM_LOG_SUBSYSTEMS];...但是如果要让C代码看起来更像面向对象,那么

    一组松散的变量是比较难追踪的,所以一般采用结构体将其封装起来

    struct{
        tBoolean logOn;
        static enum eLogLevel ouputLevel[NUM_LOG_SUBSYSTEMS];
    }sLogStruct;

    一般我们会选择直接进行创建,像这样:

    static struct sLogStruct gLogData;

    但是如果要让C代码看起来更像面向对象,那么这个结构体应该在初始化的时候进行创建,分配内存,并返回给调用函数:

    struct sLogStruct* LogInit(){
        int i;
        sruct sLogStrct *logData = malloc(sizeof(*logData));
        logData->FALSE;
        for(i = 0; i < NUM_LOG_SUBSYSTEMS; i++){
            logData-> outputLevel = eNoLogging;
        }
        return logData;
    }

    这样做的好处不单单实现了面向对象,而且还可以在初始化的时候对一些变量进行特殊赋值。当然还需要增加一个方法去释放这个对象,这个时候只需要增加一个函数就可以了。

    int LogClose(struct sLogStruct* logData){
        if(logData!= NULL){
            free(logData);
            return 1;
        }
        return 0;
    }

    当然一些C面向对象的范式里头会提到将上面Init与Close的函数命名为LogData和_LogData,以更靠近C++语法,但是个人认为对于嵌入式而言,init与close会更好理解。

    展开全文
  • c面向对象设计

    2013-05-02 23:30:57
    记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。可是,等...


        记得还在我们大学C++第一门课的时候,老师就告诉我们说,C++是一门面向对象的语言。C++有三个最重要的特点,即继承、封装、多态。等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义。可是,等我工作以后,使用的编程语言更多的是C语言,这时候我又想能不能把C语言变成面向对象的语言呢?等到后来通过思考和实践,我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。

    (1)继承性

    1. typedef struct _parent  
    2. {  
    3.     int data_parent;  
    4.   
    5. }Parent;  
    6.   
    7. typedef struct _Child  
    8. {  
    9.     struct _parent parent;  
    10.     int data_child;  
    11.   
    12. }Child;  
        在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。

    (2)封装性
    1. struct _Data;  
    2.   
    3. typedef  void (*process)(struct _Data* pData);  
    4.   
    5. typedef struct _Data  
    6. {  
    7.     int value;  
    8.     process pProcess;  
    9.       
    10. }Data;  
        封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样,我们就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。封装性,这是类拥有的属性,当然也是数据结构体拥有的属性。


    (3)多态

    1. typedef struct _Play  
    2. {  
    3.     void* pData;  
    4.     void (*start_play)(struct _Play* pPlay);  
    5. }Play;  
        多态,就是说用同一的接口代码处理不同的数据。比如说,这里的Play结构就是一个通用的数据结构,我们也不清楚pData是什么数据,start_play是什么处理函数?但是,我们处理的时候只要调用pPlay->start_play(pPlay)就可以了。剩下来的事情我们不需要管,因为不同的接口会有不同的函数去处理,我们只要学会调用就可以了。
    展开全文
  • C面向对象-单例模式

    2017-07-09 17:58:06
    在嵌入式C编程中,如果采用面向对象的方式编程,那么外设就相当于一个对象,但是这个对象并不能多次被创建,所以我们必须引入单例模式。所谓单例模式,就是一个类最多可以创建一个对象。

    在嵌入式C编程中,如果采用面向对象的方式编程,那么外设就相当于一个对象,但是这个对象并不能多次被创建,所以我们必须引入单例模式。所谓单例模式,就是一个类最多可以创建一个对象。
    在C语言中的实现如下:

    Person *getPerson(){
        static Person* p = NULL;
        if(p != NULL){
            return p;
        }
        p = (Person*)malloc(sizeof(Person));
        return p;
    }

    这样子将p设置为static,就可以实现单例模式,当然,在操作系统的时候,创建对象可能需要加入关键代码声明,否则会导致多次创建。

    展开全文
  • object-c面向对象语言

    2015-04-07 20:16:18
    以前接触过 java,c# 都是面向对象的语言 oc(object-c)也是面向对象的语言 面向对象编程 OOP( Object Oriented Programming) 一、oc 的历史 Object-c 简称OC,扩充自c语言的面向对象编程语言,是 os x 还有 ios ...
  •   Objective-C(之后称OC),顾名思义,是C语言面向对象的一种扩展,它保留了C语言的全部语法,并且兼容C语言,在这基础上建立了一套完整的面向对象编程体系。   在面向对象相关的语言层面上,可以说它是...
  • OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 Ø 打开电脑  Ø 播放电脑中的歌曲  Ø 关闭电脑 ...
  • ANSI-C面向对象编程翻译-序言

    千次阅读 2010-11-21 20:23:00
    译者序:我刚刚做出了一个艰难的决定,我决定翻译这本《ANSI-C面向对象编程》。这本书是一位刚刚离职的技术狂同事推荐给我的,细看了一点发现这是一本非常棒的书。但是苦于本人英语不佳,从网上又没有搜到中文译本,...
  • OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想 一、面向对象和面向过程的区别 1.面向过程 面向过程就像一个细心的管家,事无具细全要考虑到,而面向对象就像是个家用电器,你只...
  • c面向对象编程例子

    千次阅读 2016-03-26 18:00:08
     Redy的开发语言是C,但在源码中,有很多地方都使用到了面向对象编程的方法,例如:在基本数据类型这一个模块,所有的数据类型都继承robject;在抽象语法树模块,所有的节点都继承astobjct。在linux内核中,也有很...
  • linux c面向对象分析

    千次阅读 2015-07-10 19:13:00
    我写驱动从来不理解驱动的代码流程,就是根据框架,就像堆积木直接写好。...,才发现原来c功能这么强大。 举例 struct k_object{ struct file_operations fops; void* data; void* others; }; struct aa{
  • 程序员都知道C语言是一门面向过程的语言。所谓面向过程,就是用函数组织代码,用...所谓面向对象,就是将数据和操作数据的过程放在一个逻辑上的整体中,解决任何问题都是通过创建对象并给对象发消息的方式。这种编程
  • 1.面向过程和面向对象: 面向过程:一步一步的进行,第一步做什么,第二部执行什么。。。。 面向对象: 2..类和对象: 类:是某一批对象的抽象; 对象才是一个具体存在的实例 定义类: @interface ...
  • 对象与指针这里沿用上篇objective-c面向对象之——类和对象(上)的代码。 在 FKPersonTest.m中,有这样的代码: FKPerson* person = [[FKPerson alloc] init]; 这行代码产生了2个东西,一个是 person 变量,一个
  • Object-C学习讲解 ...面向对象的定义  类 属性 方法 封装 继承 多态  2.如何使用OC语言创建类,定义属性、方法,  实现分装、继承、多态  3.便利构造器  4.面向对象的特征  5.内存管理 MRC A
  • 用C语言进行面向对象编程,有一本非常古老的书,Object-Oriented Programming With ANSI-C。1994出版的,很多OOC的思想可能都是源于这本书。但我觉得,没人会把书里的模型用到实际项目里,因为过于复杂了。没有必要...
  • 这里没有细节的语法,大都是关于Objc面向对象概念理解的东西. 1.前言  语言其本质上都是某种抽象,不管是现实生活中人们交流的语言,还是计算机语言.   2. 对象  在Objective-C中,所有的对象都...
  • 在 Objective-C 中,把面向对象的程序设计看成是一个事物,而且我们想对这个事物做些工作。这就与过程性语言C语言迥然不同了。在C语言中,通常是先考虑要做什么,然后才关注对象。所以二者之间的思维模式几乎是...
  • 面向对象是一种编程思想,无论是在C++, Java还是OC中都是差不多的,实现了一个简单的Model类, OC中和C++类似,类的声明和实现需要显示的分开,声明在.h中,实现部分则在.m中。 声明部分:Goods.h // // Goods.h /...
  • 面向对象的编程思想核心就是 万物皆对象 , 我们能见的每一个实物都是对象 。 要我讲解的话,很简单。 比方说, 我们把“人”看作是一个类即人类,有一个人叫“小宝”。那么这里说的“小宝”就是一个对象。 ...
  • 刚刚使用Objective-C 写了一个面向对象的程序,现在将一些知识点归结如下: 1)Objective-C的类定义包含两个部分,一是类接口的声明,二是类方法的实现。 2)所有的 Objective-C的所有编译指示都以@打头。 a)类...
  • object-c中的单例模式 #import @interface FKsingleton : NSObject +(id) instance; @end #import "FKsingleton.h" @implementation FKsingleton static id instance=nil; +(id) ...
  • Objective-C 面向对象初体验

    千次阅读 2012-09-08 18:44:07
    在.m文件中可以声明static静态属性:属于类,不属于对象。同样,也没有const方法,没有友元方法。 1-4“-”声明的方法是protect,“+”声明是public,如果一个方法在.h中没有声明,但在.m中有定义,则只
  • OC中的类使用的 是两段的构造方法,这与通常的C++和Java不同,如果想通过构造的方式传递参数,可以重载一个init方法,下面贴代码。...// Copyright (c) 2014年 cc. All rights reserved. // #import
  • OC 是面向对象的语言。...objective-c 也支持面向对象的三大特征:封装,继承和多态。 类和对象 所有的类都是指针类型的变量。 定义类 面向对象的程序设计过程有2个重要概念:类(class) 和对象
  • 讲解iOS应用开发中用到的Objective-C语言中的面向对象设计。
  • : alloc 是一个关键字, 表示这是创建对象的语句, 相当于 Java 中得 new, 负责分配内存空间 和 创建对象; -- 初始化方法 : 所有的对象都从 NSObject 继承了一个默认的初始化方法 init; 另一种创建对象方法 : ...
  • Object-C 简介、面向对象思想、OC语法简介、类和对象的创建
  • OC 的包装类objective-c 是由 C 语言扩展而来的面向对象的编程语言。而 C 中的基本数据类型都不是对象,所以没有属性,方法等对象的特性。 objective-c 提供了NSValue, NSNumber来封装 C 语言的基本类型——这样他们...
  • 对象分配内存空间我们知道无论创建哪个对象,总需要先调用该类的 alloc 类方法来分配内存,这个alloc 类方法来自 NSObject, 而所有的 objective-c 类都是NSObject的子类。所以,所有的类都可以调用 alloc 方法来进行

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,239
精华内容 12,495
关键字:

c面向对象