如今统治市场的主流编程语言,如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;
}

最新文章

  1. HTML学习
  2. JS Math.max() 函数
  3. Android 使用java.net.socket 的接收问题
  4. css获取实时样式
  5. IP地址查询接口
  6. Django – query not equal
  7. iOS学习之触摸事件
  8. Spring处理id相同的bean
  9. HDOJ 1058 Humble Numbers(打表过)
  10. jQ的自定义插件
  11. BZOJ 2599 [IOI2011]Race【Tree,点分治】
  12. 关于SSIS批量抽取Excel文件报0x80004005错误的解决办法
  13. 20165230 2017-2018-2 《Java程序设计》第4周学习总结
  14. bzoj3685普通van Emde Boas树 线段树
  15. Win 7/10 安装Oracle 11g
  16. git cannot lock ref
  17. Mybatis--课程中循序渐进的体会 《黑马程序员_Springmvc+Mybatis由浅入深全套视频教程video》
  18. CentOS7.3上如何安装Apache/2.4.34
  19. POJ1456 Supermarket 并查集
  20. Final阶段第1周/共1周 Scrum立会报告+燃尽图 05

热门文章

  1. 话说 wait、notify 、 notifyAll
  2. pytorch(05)计算图
  3. solr简明教程
  4. 20个最有用的Python数据科学库
  5. IntelliJ IDEA热部署配置总结
  6. Ignatius and the Princess III HDU - 1028
  7. P1012 拼数(JAVA语言)
  8. C++覆盖,隐藏,重载
  9. (原创)在Linux上安装运行Python3(CentOS7为例)
  10. 生产环境中mysql数据库由主从关系切换为主主关系