• c 结构体 & 函数指针模拟实现一个java class(类) 和方法


    闲来无事,纯粹练习。

    student.h

    #ifndef STUDENT_H_INCLUDED
    #define STUDENT_H_INCLUDED
    
    #include <memory.h>
    #include <stdlib.h>
    
    typedef struct _Student
    {
        char name[16];
    
        int sx; //数学
        int yw; //语文
        int yy; //英语
        int wl; //物理
        int hx; //化学
        int sw; //生物
    
        int (*avg)(struct _Student *); // 所有分数的加起来的平均分
        int (*avg2)(struct _Student *); //数学, 语文, 英文加起来的平均分
    
    } Student, *lpStudent;
    
    Student *student_init(); //初始化
    
    #endif // STUDENT_H_INCLUDED

    student.c

    #include "student.h"
    
    // 所有分数的加起来的平均分
    int avg(struct _Student *lpSelf)
    {
        return (lpSelf->sx + lpSelf->yw + lpSelf->yy + lpSelf->wl + lpSelf->hx + lpSelf->sw) / 6;
    }
    
    //数学, 语文, 英文加起来的平均分
    int avg2(struct _Student *lpSelf)
    {
        return (lpSelf->sx + lpSelf->yw + lpSelf->yy) / 3;
    }
    
    //初始化
    Student *student_init()
    {
        lpStudent lpStdt = (lpStudent) malloc(sizeof(Student));
        memset(lpStdt, '', sizeof(Student));
    
        lpStdt->avg = avg;
        lpStdt->avg2 = avg2;
    
        return lpStdt;
    }

    test.c

    int main(int argc, char *argv[])
    {
        Student *lpStdt = student_init();
        lpStdt->sx = 10;
        lpStdt->yw = 20;
        lpStdt->yy = 30;
        lpStdt->wl = 40;
        lpStdt->hx = 50;
        lpStdt->sw = 60;
    
        printf(" avg:%d
    ", lpStdt->avg(lpStdt));
        printf("avg2:%d
    ", lpStdt->avg2(lpStdt));
    
        return 0;
    }

    输出的结果:

    avg:35
    avg2:20

  • 相关阅读:
    在前后端分离的SpringBoot项目中集成Shiro权限框架
    过账销售订单装箱单报错:用库存单位数量表示的实际剩余数量不能为零
    外部系统调用AX服务
    InventSum Closed and ClosedQty
    固定资产日志过账报错
    AX批处理相关
    AX2012打开报表报错
    有折扣的销售订单过账
    AX版本查询
    AX2012 SSRS Report 相关
  • 原文地址:https://www.cnblogs.com/personnel/p/8149055.html
Copyright © 2020-2023  润新知