当前位置: 首页 > news >正文

中国建设银行官网首页 网站莱芜网站设计

中国建设银行官网首页 网站,莱芜网站设计,深圳网络推广公司哪家好,优化新十条文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例#xff08;前面两部分有点无聊#xff0c;如果大家没兴趣看可以直接从知识讲解开始看#xff09; 简述OOPC oopc#xff0c;是一种轻量级的面向对象的C语言编程框架#xff0c; LW_OOPC是Light-Weight … 文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例前面两部分有点无聊如果大家没兴趣看可以直接从知识讲解开始看 简述OOPC oopc是一种轻量级的面向对象的C语言编程框架 LW_OOPC是Light-Weight Object-Oriented Programming in(with) C的缩写总共一个.h文件, 20个宏, 约130行代码, 非常的轻量级, 但却很好的支持了很多面向对象的特性, 比如继承, 多态。 可以优美的实现面向接口编程。 这个框架是由台湾的高焕堂先生以及他的MISOO团队首创。 开发环境 采用vscode为IDE使用makefile编写编译规则使用GCC编译器 这里vscode的作用主要是编辑哈哈哈。至于使用makefile编写编译规则它既可以减少不必要的编译次数(文件数量较少体现不出)也解决了博主在vscode的同一个项目中无法同时编译多个.c文件总之非常好用。 知识讲解 面向对象语言开发特性 封装根据职责将属性和方法封装到一个抽象的类中;继承实现代码的重用相同的代码不需要重复的写;多态以封装和继承为前提不同的子类对象调用相同的方法产生不同的执行结果; 函数指针   指针形象化地来说就是一个指向一个空间的地址也就是通过这个指针可以访问这个地址存储的内容。   函数指针是一个函数经过编译后计算机会给它分配一段存储空间而函数指针实际上是指向这段存储空间首地址的一个指针。 那么其函数名就表示函数的指针代表了函数的起始地址。   函数指针格式为 类型名 (*指针变量名) (函数参数列表)这里的类型名也可以理解为函数返回值的类型。   例如 一个不带参数的函数指针可以表示为void (*pFun) (void);一个带1个参数的函数指针可以表示为void (*pFun) (int);一个带1个参数并且有返回值的函数指针可以表示为int (*pFun) (int); 当需要指向一个函数时需要定义一个返回值、函数参数个数类型一致的函数例如 #include stdio.h void fun(void) {printf(this is fun\n); }int main(void) {void (*p) (void);p fun;(*p)();return 0; }其运行结果为 那么一起来看看oopc是如何是如何进行面向对象开发的吧 关键字CLASS   oopc中一个类实际上是通过一个结构体实现。伪关键字CLASS实际上是通过define重新声明得到实际上其定义为#define CLASS(type) typedef struct type type。将其称为伪关键字是因为在面向对语言中其确实是一个关键字如java、python等确实有关键字class而oopc的CLASS是通过声明得到并不是C语言实际存在的关键字。   例如,定义一个类A: // 类 CLASS (A) {···// 属性及方法 };关键字IMPLEMENTS   implements关键字在面向对象语言中是继承一个接口比不可少的关键字这里指java语言。其实在基于oopc的C语言开发中也是类似的。   在oopc中关键字IMPLEMENTS本质也是一个结构体只不过就是将一个结构体变量名重新声明成IMPLEMENTS了其声明为#define IMPLEMENTS(type) struct type type。IMPLEMENTS也是一个伪关键字   明白了类的实现接口的实现也就简单了因为两者的本质都是结构体嘛。其实现为 // 接口 INTERFACE (base) {···// 接口的属性及方法 };构造器CTOR   在oopc中构造器CTOR是一个非常重要的玩意。   在oopc程序中设计类是一件重要的工作其目的是借之产生对象。“构造器”(Constructor函数可称之为“对象之母”它能够依照类的定义产生对象。   构造器CTOR在lw_oopc.h文件中的声明为: #define CTOR(type) \type* type##_new() { \struct type *cthis; \cthis (struct type*)malloc(sizeof(struct type)); \if(!cthis) \{ \return 0; \} \type##_ctor(cthis); \return cthis; \ }不难看出CTOR构造器的主要功能为使用malloc函数分配内存空间给所声明的对象。   使用示例 在头文件中使用 // 类的声明class (A){void (*fun) (void);}// 外部声明extern A* A_new();在.c文件中使用 // 类的方法static void testFun(void){printf(this is a fun);}// 使用构造器构造类CTOR (A)FUNCTION_SETTING(fun,testFun);END_CTOR 在这里需要注意外部声明函数extern A* A_new();声明时一定要使用类的名字否则会出现报错。这个声明可加可不加网上也有很多帖子是使用ANew()来声明一个类的可能是其修改了lw_oopc.h文件中的声明吧。 函数示例 类的实现示例 main.c文件 #include stdio.h #include light.h #include lw_oopc.h void main(void) {printf(class light test\n);Light*n (Light*)Light_new();n-init(n);printf(light state:%d\n,n-getState(n));n-setState(n,1);printf(new light state:%d\n,n-getState(n)); }light.c文件 #include light.h #include stdio.h #include lw_oopc.h// 灯类的初始化 static void lightInit(void *light) {Light*pthis (Light*)light;pthis-state 0; }// 获取灯的状态 static int getLightState(void *light) {Light*pthis (Light*)light;return pthis-state; }// 设置灯的状态 static void setLightState(void *light,int newState) {Light*pthis (Light*)light;pthis-state newState; }// 构造器 分配空间给类 CTOR (Light)FUNCTION_SETTING(init,lightInit);FUNCTION_SETTING(getState,getLightState);FUNCTION_SETTING(setState,setLightState); END_CTOR light.h文件 #ifndef _LIGHT_H #define _LIGHT_H#include lw_oopc.hCLASS (Light) {int state;void (*init) (void*);int (*getState) (void*);void (*setState) (void*,int newState); };// 相当于重新new一个灯类 extern Light* Light_new();#endif // _DATA_Hvscode运行结果 接口实现示例 main.c文件 #include stdio.h #include lw_oopc.h #include myInterface.h// 接口测试 void main(void) {// 圆类的实现circle*c (circle*)circle_new();c-baseShape.init(c,circle);c-baseShape.draw(c);c-vMove(c);// 正方形类的实现square* s square_new();s-baseShape.init(s,square1);s-baseShape.draw(s);s-vMove(s); }myInterface.h文件 #ifndef _MYINTERFACE_H #define _MYINTERFACE_H#include lw_oopc.h// 接口 INTERFACE (baseShape) {char name[10];void (*init) (void*,char*);void (*draw) (void*); };// 圆类 CLASS (circle) {IMPLEMENTS (baseShape);void (*vMove) (void*); }; extern circle* circle_new();// 正方形类 CLASS (square) {IMPLEMENTS (baseShape);void (*vMove) (void*); }; extern square* square_new();#endif //_MYINTERFACE_HmyInterface.c文件 #include myInterface.h #include string.h #include stdio.h /********************圆类的实现*******************/void cinit(void*p,char*name) {circle*pthis (circle*)p;strcpy(pthis-baseShape.name,name); }void cdraw(void*p) {circle*pthis (circle*)p;printf(%s drawing\n,pthis-baseShape.name); }void cmove(void *p) {circle*pthis (circle*)p;printf(%s moving\n,pthis-baseShape.name); }CTOR (circle)FUNCTION_SETTING(vMove,cmove);FUNCTION_SETTING(baseShape.init,cinit);FUNCTION_SETTING(baseShape.draw,cdraw); END_CTOR/********************正方形类的实现*******************/ void sinit(void*p,char*name) {square*pthis (square*)p;strcpy(pthis-baseShape.name,name); }void sdraw(void*p) {square*pthis (square*)p;printf(%s drawing\n,pthis-baseShape.name); }void smove(void *p) {square*pthis (square*)p;printf(%s moving\n,pthis-baseShape.name); }CTOR (square)FUNCTION_SETTING(vMove,smove);FUNCTION_SETTING(baseShape.init,sinit);FUNCTION_SETTING(baseShape.draw,sdraw); END_CTOR结果 lw_oopc相关的文件大家可以去gitee或者是github上面找找上面有很多示例博主还没完全码明白。oopc相关文件的示例仓库 小编会持续更新的哟欢迎大家点赞收藏关注
http://www.hkea.cn/news/14587785/

相关文章:

  • 泰安网站开发推广用dw做php网站
  • 内蒙古城乡建设部网站首页深圳做高端网站建设公司
  • 汝阳建设局网站网店推广发展趋势有哪些
  • 官方网站建设条件wordpress修改站标在哪个文件
  • 介绍一个电影的网站模板做类似交易猫的网站
  • 做整个网站静态页面多少钱网站建设课程ppt模板
  • 创建网站的四个步骤是广州天河 网站建设
  • 湖南企业建站系统信息企业it外包服务公司
  • 会展门户网站源码企业综合信息服务平台
  • 怎么查在建工地的信息搜索 引擎优化
  • 做好网站如何发布国内网站排名
  • 上海网站建设赢昶软件开发平台开源
  • 做网站多少钱zwnet网络管理软件app
  • 定制网站开发方案ppt最近一周热点新闻
  • 免费做橙光封面的网站心理学门户网站开发与实现
  • 网站开发工程师适合女生吗广告平面设计作品
  • 江西有色建设集团公司 网站设计公司工作室
  • 做网站市场价格多少建立网站需要多少钱湖南岚鸿
  • 免费网站建设大全网站建设中英语如何说
  • 盐城大丰建设局网站wordpress百度推送代码加统计
  • 久久建筑网站下载wordpress评论时间
  • 珠宝行业做网站的好处怎么知道网站是某个公司做的
  • 深圳建网站的公欧美男女直接做的视频网站
  • 爱电影网站企业网站建设需注意点
  • 做app必须有网站吗国内一家做国外酒店团购的网站
  • 优秀网站网页设计分析网站怎么写容易获得关键词排名
  • 有教做点心的网站吗志迅东莞网站建设
  • 高端网站改版顾问上门定制衣服哪家好
  • 万网网站建设步骤国外注册网站做百度seo
  • 公司做网站的申请建工网校app免费下载