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_typeBUXAPI(SuperObject *) so_dome();这样就告诉用户这是我们自己的API, 你们可以调用8. 需要内置的对象:int, float, string, mapping(命名空间中非常重要), list, stack, type9. 目录结构:Include, Objects, Tools, Doc, Demo, Lib, Module10. 在面向对象中, 对象之间的操作符, 应该都转为函数的操作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...}   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几道web题简单总结

拖了好长时间,总结一下这一段时间做的几道值得记录一下的题目,有的没做出来,但是学习到了新的东西 1.homebrew event loop ddctf的一道题目,学到了python eval函数的用法,首先分析题目: # -*- encoding: ut…

js进阶 9-5 js如何确认form的提交和重置按钮

js进阶 9-5 js如何确认form的提交和重置按钮 一、总结 一句话总结: 1、这个并不好做:onsubmit 里面的代码必须返回false才能取消onsubmit方法的执行,所以,有return。注意:一般的调用肯定是没有return的。onsubmit"…

.NET中RabbitMQ的使用

.NET中RabbitMQ的使用 概述 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。AMQP(高级消息队列协议) 是一个异步…

SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁

死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象。当然…

python下载安装搭建

python官网下载python运行环境(https://www.python.org/downloads/),建议下载稳定版本,不推荐使用最新版本 安装 然后我们打开CMD,在里面输入python,就可以直接进入进行编码了 如果输入python出现下面错误 …

35个Java 代码性能优化总结

前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗&#…

MySQL讲义

1 MySQL基础知识 瑞典MySQL AB公司开发,由SUN收购,而后SUN被甲骨文并购,目前属于Oracle公司。 MySQL是一种关联数据库管理系统 由于其体积小、速度快、总体拥有成本低、MySQL软件采用了双授权政策,分为社区版和企业版。 …

Teams Bot App Manifest 文件解析

这篇文章我们继续以 Hello World Bot 这个 sample 来讲一下 manifest template。 实际上在 Teams app 开发的时候,有 manifest 的概念,manifest 是用来说明这个 teams app 的一些基本信息和配置信息,比如 app 的名字,app有哪些能…

[Dart] Flutter开发中的几个常用函数

几个Flutter开发中的常用函数 /** 返回当前时间戳 */static int currentTimeMillis() {return new DateTime.now().millisecondsSinceEpoch;}/** 复制到剪粘板 */static copyToClipboard(final String text) {if (text null) return;Clipboard.setData(new ClipboardData(text…

Cordova入门系列(三)Cordova插件调用 转发 https://www.cnblogs.com/lishuxue/p/6018416.html...

Cordova入门系列(三)Cordova插件调用 版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心内容,插件的调用。演示一个例子&#xf…

clojure with postgres

主要关注访问pg。不关心其他db 1 clojure.java.jdbc https://github.com/clojure/java.jdbchttp://clojure-doc.org/articles/ecosystem/java_jdbc/reusing_connections.html这个最广,需要配合不同DB[org.clojure/java.jdbc "0.7.9"] [org.postgresql/pos…

lua入门

https://en.blog.nic.cz/2015/08/12/embedding-luajit-in-30-minutes-or-so/

shell脚本传可选参数 getopts 和 getopt的方法

写了一个shell脚本,需要向shell脚本中传参数供脚本使用,达到的效果是传的参数可以是可选参数 下面是一个常规化的shell脚本: echo "执行的文件名为: $0";echo "第一个参数名为: $1";echo "第二个参数名为: $2"…

Teams Tab App 代码深入浅出 - 配置页面

上一篇文章我们使用Teams Toolkit 来创建、运行 tab app。这篇文章我们深入来分析看一下tab app 的代码。 先打开代码目录,可以看到在 src 目录下有入口文件 index.tsx,然后在 components 目录下有更多的一些 tsx 文件,tsx 是 typescript的一…

labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)

这里主要是搬运一下能找到的 labelme标注的json文件数据转成coco数据集格式(可处理目标框和实例分割)的代码,以供需要时参考和提供相关帮助。 1、官方labelme实现 如下是labelme官方网址,提供了源代码,以及相关使用方…

EpSON TM-82II驱动在POS系统上面安装问题处理

按照品牌名称,在网上下载的安装包为apstmt82.rar 下面讲解一下,如何的解决爱普生打印机在POS机器上面的安装问题,这个算是一个比较奇特的故障问题,不像其它的新北冰洋(SN3C)的U80_U80II,SeNor的…

打印图片的属性和实现另存图片功能以及使用numpy

上一篇我们已经学了如何读取图片的功能了以及和opencv的环境搭建了,今天接着来学习,哈哈哈,今天刚好五一,也没闲着,继续学习。 1、 首先我们来实现打印出图片的一些属性功能, 先来看一段代码: 1…

Ubuntu 18.04下命令安装VMware Tools

2019独角兽企业重金招聘Python工程师标准>>> sudo apt-get upgrade sudo apt-get install open-vm-tools-desktop -y sudo reboot 转载于:https://my.oschina.net/u/574036/blog/1829455

phpstorm PHP language level无法选择

phpstorm PHP7新特性一直提示红色波浪线,应该是没有设置PHP 版本,但是打开PHPstorm---preference--lannguage&frameworks--PHP , 发现PHP language level 无法选择PHP7.2 ,查看旁边的提示信息说是同步了composer 的原因&#…

Qfile

打开方式: 1 void AddStudents::write_to_file(QString src){2 QFile file("stu.txt");3 if (!file.open(QIODevice::Append | QIODevice::Text)){4 QMessageBox::critical(this,"打开文件错误","确认");5 r…