zoukankan      html  css  js  c++  java
  • 如何让c语言使用结构体近似模拟c++中的类

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


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


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


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


    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    
    #define LINE for (i = 0 ; i < 60 ; i++) {printf("-");}printf("
    ");
    #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("
    ");
    	LINE;
    	printf("%d",stu1.num);
    	SPACE;
    	printf("%s",stu1.name);
    	SPACE;
    	printf("%.2lf",stu1.average);
    	printf("
    ");
    	LINE;
    	return 0;
    }


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


    #include <stdio.h>    
    #include <stdlib.h>  
      
    #define LINE for (i = 0 ; i < 60 ; i++) {printf("-");}printf("
    ");  
    #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("
    ");  
        LINE;  
        printf("%d",stu1.num);  
        SPACE;  
        printf("%s",stu1.name);  
        SPACE;  
        printf("%.2lf",stu1.average);  
        printf("
    ");  
        LINE;  
        return;  
    }  






  • 相关阅读:
    mybatis+sql语句
    坐标转换
    sql语句含中文JDBC查询不到
    架构阅读笔记16
    架构阅读笔记15
    架构阅读笔记14
    windows安装imgaug包报错中Shapely
    java除法
    Java输入输出问题复习
    java自学,基础,入门
  • 原文地址:https://www.cnblogs.com/csnd/p/12897069.html
Copyright © 2011-2022 走看看