C语言实现Java三大特性

//

前言

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

定义结构体(对象)

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

继承

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

封装

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

typedef struct _Manufacturer {
    char name[10];
} Manufacturer;

typedef struct _robot
{
    int id;
    Manufacturer manufacturer;                 // inherit
    void (*function)(struct _robot );          // polymorphic
    int  (*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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值