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面向对象编程的更多相关文章

  1. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  2. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  3. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  4. Delphi_09_Delphi_Object_Pascal_面向对象编程

    今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...

  5. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  6. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

  7. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  8. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  9. 进击的Python【第六章】:Python的高级应用(三)面向对象编程

    Python的高级应用(三)面向对象编程 本章学习要点: 面向对象编程介绍 面向对象与面向过程编程的区别 为什么要用面向对象编程思想 面向对象的相关概念 一.面向对象编程介绍 面向对象程序设计(英语: ...

  10. 第二章 Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

随机推荐

  1. 课后作业 利用for循环嵌出菱形

    for (int i = 1; i <= 11; i++) // i 的起始值是一 在<=11; 逐个递增 { int a, b, c;// 定义abc三数 for (a = 11; a ...

  2. .NET 图片上传接收类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  3. dubbo异步调用原理 (1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.使用方式 服务提供方不变,调用方代码如下: 1     <dubbo:reference id=& ...

  4. Ajax上传文件注意事项

    如图: 因为传进来的参数被预先处理了,所以才出现了illegal invocation报错,只要将processData的值改为false就能解决这个小问题: 因为JQ自动的帮我们设置了请求头,但是a ...

  5. [SinGuLaRiTy] 2017-07-21 综合性测试

    [SinGuLaRiTy-1028] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有题目:Time Limit: 1s | Memo ...

  6. kuangbin专题16B(kmp模板)

    题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...

  7. js数据类型基础

    一.数据类型 数据类型包括:基本数据类型和引用数据类型 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还 ...

  8. Div的移动

    //JQuery 拖拽本体DIV,把以下代码全部复制即可 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  9. 关于如何使用代码触发 UIButton的Unwind Segue

    当我们在一个控制视图上,在UITextField输入文字信息之后,希望可以使用键盘的Done触发一个 Done的UIButton,但是刚开始我直接在 -(BOOL)textFieldShouldRet ...

  10. 取石子游戏 BZOJ1874 博弈

    小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子, 每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问你他是否有必胜策略, ...