如今统治市场的主流编程语言,如c++,java,大都是面向对象类型的编程语言。

而众所周知,c语言是面向过程的编程语言,但是它拥有一个类似于类的结构,叫做结构体,主要的区别在于结构体无法定义函数。

因此,为了c语言的结构体近似模拟类,我们可以在结构体中定义函数指针。

下面这个例子,是最常用的计算学生分数平均数的c++类模版:

#include <cstdio>
#include <iostream>
#include <cstdlib> #define LINE for (i = 0 ; i < 60 ; i++) {printf("-");}printf("\n");
#define SPACE for (i = 0 ; i < 20 ; i++) printf(" "); using namespace std; class Student
{
public:
double stuAvg(double score[]);
int num;
char name[10];
double score[3];
double average;
}; double Student::stuAvg(double score[]){
double sum = 0.0;
double average = 0.0;
for (int i=0 ; i < 3 ; i++)
{
sum += score[i];
}
return average = sum/3;
} int main(void){
Student stu1;
for (int i = 0 ; i < 3 ; i++)
{
scanf("%lf",&stu1.score[i]);
}
stu1.num = 1001;
memset(stu1.name,0,sizeof(stu1.name));
strcat(stu1.name,"Peter");
stu1.average = stu1.stuAvg(stu1.score); //Output Part printf("NUM");
SPACE;
printf("NAME");
SPACE;
printf("AVERAGE");
printf("\n");
LINE;
printf("%d",stu1.num);
SPACE;
printf("%s",stu1.name);
SPACE;
printf("%.2lf",stu1.average);
printf("\n");
LINE;
return 0;
}

接下来我们使用结构体模拟上例中类的作用:

#include <stdio.h>
#include <stdlib.h> #define LINE for (i = 0 ; i < 60 ; i++) {printf("-");}printf("\n");
#define SPACE for (i = 0 ; i < 20 ; i++) printf(" "); struct Student{
double (*stuAvg)(double score[]);
int num;
char name[10];
double score[3];
double average;
}; double Calc_Avg(double score[]){
int i = 0;
double sum = 0.0;
double average = 0.0;
for (i=0 ; i < 3 ; i++)
{
sum += score[i];
}
return average = sum/3;
} void main(void){
int i = 0;
struct Student stu1;
for (i = 0 ; i < 3 ; i++)
{
scanf("%lf",&stu1.score[i]);
}
stu1.num = 1001;
memset(stu1.name,0,sizeof(stu1.name));
strcat(stu1.name,"Peter");
stu1.stuAvg = Calc_Avg;
stu1.average = stu1.stuAvg(stu1.score); //Ouuput Part printf("NUM");
SPACE;
printf("NAME");
SPACE;
printf("AVERAGE");
printf("\n");
LINE;
printf("%d",stu1.num);
SPACE;
printf("%s",stu1.name);
SPACE;
printf("%.2lf",stu1.average);
printf("\n");
LINE;
return;
}

如何让c语言使用结构体近似模拟c++中的类的更多相关文章

  1. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  2. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

  3. 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式

    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...

  4. go语言学习-结构体

    结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...

  5. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

  6. [日常] Go语言圣经--结构体,JSON习题

    Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...

  7. Go语言 6 结构体、方法和接口

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...

  8. C语言链表结构体(学习笔记)

    #include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...

  9. C语言的结构体和 C++结构体的区别

     C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不 ...

随机推荐

  1. jQuery实现全网热播视频

    <section id="play"> <h1>全网热播视频</h1> <ul> <li><img src=&qu ...

  2. HDOJ-1213(简单并查集)

    How many tables HDOJ-1213 #include<iostream> #include<cstring> #include<cstdio> #i ...

  3. mock 请求分发

    首发于 语雀文档 背景是这样的 我们公司的后管项目走的不是 resful 风格的 api,而是走后管网关,后管网关会将请求进行分发,具体怎么分发,有这么以下几点: 请求全部走 POST 请求 URL ...

  4. AI人脸匹对

    人脸匹对 技术 调用到百度的AI接口,layui的图片上传,栅格化布局 核心代码 纯py代码运行 # encoding:utf-8 from aip import AipFace import bas ...

  5. struct2中package的参数解析

    struct2框架的核心组件是action和拦截器,它使用包来管理action和拦截器,每个包就是多个action.多个拦截器引用的集合.在struct.xml中,package元素用于定义包的配置, ...

  6. Linux less命令查看文件常用查询方法

    g 跳到文件开头 G 跳到文件结尾 / 往下搜索字符 ? 网上搜索字符 n 执行上一个搜索(/或者?的搜索),例如上一个搜索是使用/搜索的,则继续使用/搜索,即往下搜索结果 N 反向执行上一个搜索(/ ...

  7. 从零开始编写一个BitTorrent下载器

    从零开始编写一个BitTorrent下载器 BT协议 简介 BT协议Bit Torrent(BT)是一种通信协议,又是一种应用程序,广泛用于对等网络通信(P2P).曾经风靡一时,由于它引起了巨大的流量 ...

  8. Tornado 简明教程

    1.TornadoTornado:python编写的web服务器兼web应用框架1.1.Tornado的优势轻量级web框架异步非阻塞IO处理方式出色的抗负载能力优异的处理性能,不依赖多进程/多线程, ...

  9. 2019看雪CTF 晋级赛Q2第四题wp

    上次参加2019看雪CTF 晋级赛Q2卡在了这道题上,虽然逆出算法,但是方程不会解,哈哈哈哈,果然数学知识很重要呀,现在记录一下. 首先根据关键信息,根据错误提示字符串定位到这里: 1 int __t ...

  10. Kubernetes 实战 —— 04. 副本机制和其他控制器:部署托管的 pod

    保持 pod 健康 P84 只要 pod 调度到某个节点,该节点上的 Kubelet 就会运行 pod 的容器,从此只要该 pod 存在,就会保持运行.如果容器的主进程奔溃, Kubelet 就会自动 ...