C面向对象编程
C语言面向对象编程
1. 定义一个SuperObject结构体, 里面包含最少的元素, 但是确实每一个对象都含有的, 这样可以实现多态 2. 每一个对象都是基于类的, 我们知道类都是单例对象, 所以我们创建结构体, TypeObject(类似于Java中的class), 接着每一个Object结构体中 都包含着一个对应类型的TypeObject指针, 比如"Hello world"这一个字符串对象所对应的结构体中有一个StrTypeObject示例, 这个StrTypeObject 是由我们定义的TypeObject结构体创建的, 当然万物皆为对象, 所以还有MegaTypeObject作为TypeObject结构体的实例 3. 注意: 在所有的Object结构体中, 都要SuperObject中所定义的所有的数据(主要是refcount, type_ptr(指向对应的class对象, 这里就是一 个单例的, 所以方法就是在这里的, static修饰的东西也都在这里, 多态的实现也是在这里, 因为多态主要是为要用方法服务的)), 内置的对象都是静态的 4. 用户定义的类, 则是需要动态通过TypeObject这个结构体创建出来的, 用户所定义的方法也要在该TypeObject中保存起来, 用于以后的调用, 其实 在Java中至于对象有关的属性, 在这里原来的SuperObject因为包含的元素太少了不能满足我们的需求, 我们需要在定义一个含有一个dict的BasicSuperO bject结构体, 通过一个dict, 以"属性名":属性名值的形式来实现对每一个对象的属性保存, 而方法则在TypeObject中的dict中, 也通过类似的方法存储 5. 通过以上的几点我们知道, 在TypeObject中定义方法和属性, 对应于Java中的static修饰的函数和属性, 都是与class有关, 与instance无关的, 而在BasicObject中定义的则是至于instance有关的 6. 在TypeObject中需要内置一些方法, 让每一个对象都有对应的处理操作, 实现继承 可以: 1. 数值处理的函数的结构体 2. 序列处理的函数的结构体 3. 映射处理的函数的结构体 则系统每一种内置对象分别填充对应的结构体函数指针, 并也在dict中存储, 这样在调用时就可以统一的调用了 7. 为了有个性 #define BUXAPI(return_type) return_type BUXAPI(SuperObject *) so_dome(); 这样就告诉用户这是我们自己的API, 你们可以调用 8. 需要内置的对象: int, float, string, mapping(命名空间中非常重要), list, stack, type 9. 目录结构: Include, Objects, Tools, Doc, Demo, Lib, Module 10. 在面向对象中, 对象之间的操作符, 应该都转为函数的操作 11. 在Map中比较中应该调用每一个对象的equal方法, 如果类型不同则为false, 相同则比较真正比较的值, 返回一个内置的None对象 12. 遇到变量的重复定义, 使用extern关键字, 这个时候可以使用一个宏定义#define JCAPI_DATA(datatype) extern datatype 使得表达更加的直观
其他
1. 在C语言中定义了一个全局变量, 如果要直接为该全局进行赋值, 那么必须要赋常量值:0, NULL, "string", 如果要赋变量的值, 需要在函数中赋值 2. 虽然这里讲的是面向对象的编程但是我在这里写的是一些技巧的东西 如果有多个函数都结构相同的参数列表, 并且特别的长, 我们可以使用struct封装参数列表, 这样函数的参数列表就会简明一些, 为了方便构造结构体, 我们可以通过一个宏或者函数来创建该结构体 3. C语言中要想实现foreach, 可以说使用宏定义 #define for_each(s) \ List *tmp = s.lists; 调用时 for_each() { ...code... }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
前端性能优化:细说JavaScript的加载与执行
本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会让您得到与之匹配的回报。 缘起 随着用户体验的日益重视,前端性能对用户体验的影响备受关注,但由于引起性能问题的原因相对复杂,我们很难但从某一方面或某几个方面来全面解决它,这也是我行此文的原因,想以此文为起点,用一系列文章来深层次探讨与梳理有关Javascript性能的方方面面,以填补并夯实自己的知识结构。 目录结构 本文大致的行文思路,包含但不局限: 不得不说的JavaScript阻塞特性 合理放置脚本位置,以优化加载体验,js脚本放在 <body>标签闭合之前。 减少HTTP请求次数,压缩精简脚本代码。 无阻塞加载JavaScript脚本: 使用<script>标签的defer属性。 使用HTML5的async属性。 动态创建<script>元素加载JavaScript。 使用XHR对象加载JavaScript。 不得不说的JavaScript的阻塞特...
- 下一篇
Python源码读后小结
Python 笔记 前言(还是叫杂记吧) 在python中一切皆对象, python中的对象体系大致包含了"类型对象", "Mapping对象(dict)", "Sequence对象(list, set, tuple, string)", "Number对象(integer, float, boolean)" 以及 "Python虚拟机自己使用的对象" 在Python中所有的对象都是一个结构体, 所有对象的父类的结构体是 #define PyObject_HEAD \ int ob_refcount; \ struct ob_type *ob_ref; typdef struct { PyObject_HEAD // 在每一个其他的结构体中都定义一个PyObject_HEAD, 为将来的多态打下基础 } PyObject; 在Python中的一个整型对象是 typedef struct { PyObject_HEAD long int_val; } PyInt_Object; 在Python中一个Sequence对象是 注意: 由于序列的大小是变化的, 所以有定义一个PyObject_...
相关文章
文章评论
共有0条评论来说两句吧...