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...
}
C面向对象编程的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程
PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...
- Delphi_09_Delphi_Object_Pascal_面向对象编程
今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...
- python基础-面向对象编程
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...
- 面向对象编程(OOP)
什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶
Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...
- 进击的Python【第六章】:Python的高级应用(三)面向对象编程
Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
随机推荐
- GPU,CUDA,cuDNN的理解
最近用到这方面的知识,感觉这篇文章写的很好,为了方便自己查阅,就搬运了过来,如果牵涉到侵权,请联系我,我会删除该博文!!! 我们知道做深度学习离不开GPU,不过一直以来对GPU和CPU的差别,CUDA ...
- position用法
fixed的用法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 博弈论-一堆nim博弈合在一起
今天A了张子苏大神的的题,感觉神清气爽. 一篇对于多层nim博弈讲的很透彻的博文:http://acm.hdu.edu.cn/forum/read.php?fid=9&tid=10617 我来 ...
- [Swift实际操作]九、完整实例-(6)创建App欢迎界面
本文创建一个位于导航控制器之内的欢迎页面,该页面主要用来向用户简要介绍产品的功能.以及提供主要功能的入口. 首先选择自定义视图文件夹[CustomViews],需要在该文件夹下,导入一款第三方类库.该 ...
- Django 实现的分页类
后台实现的一个分页类: from django.utils.safestring import mark_safe class Page: def __init__(self, current_pag ...
- for别名
name:for(int i =0 ;i< a.length;i++){ System.out.println(i); for(int j =0;j<i;j++){ continue na ...
- redis数据库介绍(NoSql数据库)
- c++中STL中的next_permutation函数基本用法
对于next_permutation函数是针对于排列组合问题的库函数,它的排序方式是按照字典的方式排列的·: 如以下代码对于next_permutation函数的初步解释: #include<c ...
- POJ 3067 Japan (树状数组 && 控制变量)
题意: 西海岸和东海岸有分别有n (1~n)个和m (1~m)个城市, 两个海岸的城市之间有k条公路连通, 公路会相交, 现在给出城市和公路的信息问你由这些公路组成的复杂交通有多少个交点 (如果两个条 ...
- 1065. A+B and C (64bit) (20)
Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C. Input S ...