如何让c语言使用结构体近似模拟c++中的类
如今统治市场的主流编程语言,如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++中的类的更多相关文章
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- 01.C语言关于结构体的学习笔记
我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
- 将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. ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
- Go语言 6 结构体、方法和接口
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...
- C语言链表结构体(学习笔记)
#include <stdio.h> #define LENTEST 100 // 采取逐步删除的方法求的素数 //先假设1-100都是素数,然后剔除2的倍数, //3的倍数,直到剔除所有 ...
- C语言的结构体和 C++结构体的区别
C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不 ...
随机推荐
- PAT-1153(Decode Registration Card of PAT)+unordered_map的使用+vector的使用+sort条件排序的使用
Decode Registration Card of PAT PAT-1153 这里需要注意题目的规模,并不需要一开始就存储好所有的满足题意的信息 这里必须使用unordered_map否则会超时 ...
- Windows下用户手册
(1)net user(查看系统用户) (2)net user 用户名(查看具体某个系统用户详细信息) (3)net user 用户名 密码 /add(在本地组成员创建新用户,此时为Users组) ...
- 树莓派4刷FreeBSD
树莓派4可以刷FreeBSD了.需要替换boot文件.加群获得文件QQ交流群817507910.
- Memory Networks02 记忆网络经典论文
目录 1 Recurrent Entity Network Introduction 模型构建 Input Encoder Dynamic Memory Output Model 总结 2 hiera ...
- LZZY高级语言程序设计之169页**5.17
import java.util.Scanner;public class MQ3 { public static void main(String[] args) { Scanner sc = ne ...
- java常见面试题3:线程间通信
写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z. 打印顺序为12A34B56C78D--5152Z.要求用线程间的通信. 代码清单: class Printer { private in ...
- MVC中"删除"按钮无法实现
出现原因:MVC视图中定义了空的模板页 解决办法:删除模板页 或 改成定义页面标题都可以
- matplotlib常规使用方法
1,指定图片大小和像素 Python绘图问题:Matplotlib中指定图片大小和像素 2,绘图命令的基本架构及其属性设置 绘图与可视化 3,python基础语法(二)--- plt的一些函数使用 p ...
- Centos7使用yum安装RabbitMq以及配置
RabbitMQ是基于AMQP的一款消息管理系统,是基于erlang语言开发的! 消息队列,即MQ,Message Queue:消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消 ...
- 全网最详细的Linux命令系列-cd命令
Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 命令格 ...