C语言面向对象编程

C语言面向对象编程

ID:41037148

大小:125.50 KB

页数:11页

时间:2019-08-14

C语言面向对象编程_第1页
C语言面向对象编程_第2页
C语言面向对象编程_第3页
C语言面向对象编程_第4页
C语言面向对象编程_第5页
资源描述:

《C语言面向对象编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C语言面向对象编程原创作者:rubynroll  阅读:5643次  评论:0条  更新时间:2008-12-15    经常看到关于OO编程的讨论,C++,Java,C#...还有最近很流行的动态语言Python,Ruby等,但很少看到有C的份。在我看来,OO编程的核心是OO的思想,用什么语言倒是其次。但是,不可否认,那些专门为OO编程设计的语言可以比较方便和自然地表达OO思想,有些语言甚至强制使用OO特性。C,作为最贴近底层的高级语言,拥有简洁的语法和直接内存操作能力(指针),大量运用于系统级编程,如操作系统内核,驱动程序等。而

2、在嵌入式系统中,由于资源有限等因素,更倾向于用C编程。C虽然在语言特性上并没有体现OO特性,但是依然可以通过各种编程技巧来体现OO的思想。由于C的高度自由的特点,在OO编程方面还能体现有别于其他语言的特殊韵味。目录[-]1.C的面向对象概念2.用struct来仿真class3.实现OO的继承机制C的面向对象概念OOPrograminginCisnotonlyPOSSIBLEbutalsoPRACTICAL.----------------------------------------------------------------

3、----------------OO思想在Unix世界中很早就有:UNIX把设备抽象成文件,这样就可以用一套相同的方法(open,read,write,close,...)去访问不同的设备和文件——尽管设备之间的差异很大。用OO的观点来看,这些“设备”对象都实现了"文件操作接口",可以想象有一个叫"文件"的基类,定义了"文件操作接口",“设备”对象继承了“文件”对象....。在实现角度看,在内核里面,设备驱动提供了自己的read,write等实现,并用它们去填充文件操作结构体里面的函数指针....这和C++里面的虚函数运行时绑定的道

4、理是一样的。(C++虚函数是其实是运行时静态绑定,而文件操作接口可以运行时动态绑定:-)Linux内核中则处处体现了OO的思想。2.6内核的DeviceDriverModal是一套层次分明又错综复杂的机制,其中体现了许多OO设计理念。虽然可能设备驱动程序开发者觉察不到,但所有的设备驱动对象内部都隐藏了一个叫KObject的对象。内核把这些KObjects互相联系在一起,并通过KObject的相互关系构造了/sys文件系统。/sys就是内核中各种设备对象的映射图,如果把/sys全部展开,我们可以清楚地看到各种对象的关系。实践证明,C也

5、可以很好地用于OO编程,而且可以用于构造很复杂的系统,而且C在表达OO思想的时候并不会显得蹩脚,而是可以很简单,很自然。用struct来仿真classOOPrograminginCisnotonlyPOSSIBLE,butalsoPRACTICAL.--------------------------------------------------------------------------------“class“是很多OO编程语言里的关键字,它来源于OO鼻祖Smalltalk。class(类),是对一群有相同特性的对象的抽象

6、概括,对象称为类的实例。在class里面可以存放有状态(变量),行为(函数/方法)....有关OO概念、方法的文章太多了,不再啰嗦。在C里面,唯一可以实现自定义类型的是struct,struct是C的OO编程最重要的工具。一个最常见的技巧,就是用struct来"仿真"class:在struct里面放入变量,函数指针,嵌入其他struct等。以下例子摘自我最近刚开发完成的一个USBFirmware项目:C代码1.struct usb_device;  2.struct usb_ctl;  3.  4.struct usb_iobuf 

7、{  5.  int len;              /* data length in the buffer */  6.    unsigned char buf[USBEPFIFO_SIZE];  /* data buffer itself */  7.};  8.  9.struct usb_endpoint {   int type;       /* endpoint type: BULKIN, BULKOUT, CTL, ISO ... */  10.    int qlen;       /* queue len

8、gth */  11.  12.    xQueueHandle lock;  /* semaphore lock */  13.    xQueueHandle q;     /* data queue (pointer of bu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。