C语言的结构体struct到底和C++的类Class有什么不同? 结构体是一群相关数据的集合,而类不仅仅是相关数据的集合,更是相关函数的集合。 怎么理解?就是说结构体只能调用结构体包含的变量,而类能调用类包含的方法(函数)。 如果说在结构体中实现了调用相关函数的话,那么我们就说OOP IN C了。
#ifndef class #define class struct #endif
/*-----student类-BEGIN----*/ class student{ class student *this; char name[30]; int math; int chinese; int english; void(*sum)(class student*); void(*ave)(class student*); void(*list)(class student*); }; /*-----方法池-BEGIN----*/ void sum_method(class student*p){ printf("SUM=%d\n",p->math+p->chinese+p->english); } void ave_method(class student*p){ printf("AVE=%d\n",(p->math+p->chinese+p->english)/3); } void list_method(class student*p){ printf("%s\n%d\n%d\n%d\n",p->name,p->math,p->chinese,p->english); } /*-----方法池-END-----*/ /*-----类操作-BEGIN----*/ void creatStudent(class student*p,char *n,int m,int c,int e){ p->this=p; strcpy(p->name,n); p->math=m; p->chinese=c; p->english=e; p->sum=sum_method; p->ave=ave_method; p->list=list_method; } /*-----类操作-END----*/ /*-----student类-END----*/
void main(){ /*-----student类的实例化-BEGIN----*/ class student knocker; class student vlinux; class student live41; creatStudent(&knocker,"Knocker",50,60,70); creatStudent(&vlinux,"vlinux",95,98,90); creatStudent(&live41,"live41",80,90,100); /*-----student类的实例化-END----*/ /*-----这里,三个实例分别调用了三个结构体所包含的方方法(函数)-----*/ (*knocker.list)(&knocker); (*knocker.sum)(&knocker);
(*vlinux.list)(&vlinux); (*vlinux.ave)(&vlinux);
(*live41.list)(&live41); getch(); }
淘宝杜琨