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

C语言实现Java三大特性

//

前言

面向对象的java语言有着多种设计模式与特性。比如封装、继承、多态等等。
在这篇文章中,我会使用java的代码思路,实现C语言版的JAVA三大特性。
并从写代码的角度,从0开始构建。

定义结构体(对象)

设计了一个机器人结构体(对象)。
机器人有他的ID,这是他的静态特征,是主键。
机器人有制造商,不光机器人有,所有工业产品都有。
机器人有许多行为,跑、跳、检查修理日期等等。
机器人有许多内设动作,就是预设将不同行为进行排列组合。

继承

机器人是工业产品的子类,即机器人继承了工业产品。
体现在代码上就是结构体的嵌套

封装

将机器人的所有特征、行为、内置动作封装在一起。
体现在代码上就是结构体里有变量和函数指针。

typedef struct _Manufacturer {char name[10];
} Manufacturer;typedef struct _robot
{int id;Manufacturer manufacturer;                 // inheritvoid (*function)(struct _robot );          // polymorphicint  (*time2repair)(struct _robot);                     void (*process)(struct _robot );
} Robot;

多态

机器人结构体(对象)中有功能函数指针function和维修函数指针time2repair。
定义函数robot_run_function,robot_jump_function,实现function功能。
定义函数robot_time2repair,实现time2repair功能。

void robot_run_function(Robot robot) {printf("robot_id: %d, run!\n", robot.id);
}
void robot_jump_function(Robot robot) {printf("robot_id: %d, jump!\n", robot.id);
}
int robot_time2repair(Robot robot) {printf("robot_id: %d, need to repair next weekend!\n", robot.id);return 9;
}

定义函数process1,实现process功能(暂时不写)

void process1(Robot robot)
{// 进程1:先跑2次,再跳1次,最后计算修理日期
}

初始化机器人结构体(对象)。将process1赋给函数指针process,调用process。

int main() {Robot robot;Manufacturer manufacturer;strcpy(manufacturer.name, "SKF");robot.id = 2;robot.manufacturer = manufacturer;robot.process = process1;robot.process(robot);return 0;
}

最后实现process1,思路仍然是将函数赋给函数指针并调用。

void process1(Robot robot)
{// 进程1:先跑2次,再跳1次,最后计算修理日期robot.function = robot_run_function;robot.function(robot);robot.function(robot);robot.function = robot_jump_function;robot.function(robot);robot.time2repair = robot_time2repair;int remain_days = robot.time2repair(robot);printf("manufacturer: %s, id: %d, remain_days: %d\n", robot.manufacturer, robot.id, remain_days);
}

打印结果

robot_id: 2, run!
robot_id: 2, run!
robot_id: 2, jump!
robot_id: 2, need to repair next weekend!
manufacturer: SKF, id: 2, remain_days: 9
http://www.lryc.cn/news/129675.html

相关文章:

  • GBU812-ASEMI新能源专用整流桥GBU812
  • 数据结构,线性表与线性结构关系,顺序表与顺序结构关系,线性表与顺序表关系
  • Bigemap Pro国产基础软件介绍——一款多源数据处理软件
  • 算法练习Day49|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II
  • 【Android Framework (十二) 】- 智能硬件设备开发
  • 若依框架给字典字段新增color值,并且实现下拉列表选项进行颜色设置
  • JDK 8 升级 JDK 17 全流程教学指南
  • Docker 网络之 ipvlan 和 macvlan
  • 【Rust】Rust学习 第十三章Rust 中的函数式语言功能:迭代器与闭包
  • 【Linux操作系统】详解Linux系统编程中的管道进程通信
  • 【Redis从头学-4】Redis中的String数据类型实战应用场景之验证码、浏览量、点赞量、Json格式存储
  • linux 统计命令
  • docker部署springboot应用
  • YOLO v5、v7、v8 模型优化
  • 回归预测 | MATLAB实现SSA-BP麻雀搜索算法优化BP神经网络多输入单输出回归预测(多指标,多图)
  • QT的mysql(数据库)最佳实践和常见问题解答
  • 使用PyMuPDF库的PDF合并和分拆程序
  • 2023/8/18 - You need to rely on yourself to achieve the life you want
  • Data Abstract for .NET and Delphi Crack
  • Eclipse集成MapStruct
  • 采用pycharm在虚拟环境使用pyinstaller打包python程序
  • Rx.NET in Action 中文介绍 前言及序言
  • Azure Blob存储使用
  • mysql、redis面试题
  • 22、touchGFX学习Model-View-Presenter设计模式
  • Python Opencv实践 - 图像高斯滤波(高斯模糊)
  • 使用 Qt 生成 Word 和 PDF 文档的详细教程
  • ssm+vue校园美食交流系统源码
  • 电力系统基础知识(一)—电力系统概述
  • spring(15) SpringBoot启动过程