我的C历程—大结局—C的OOP(伪,勿喷)

对于我们学大数据专业来讲,c完全不需要学的很深,学c要深入可能是向linux嵌入式,单片机等等方向发展。所以说,这可能是最后一次搞这么大的工程了(大概几百行)。
由于c对数据类型的限制,所以搞了个list类型,可以装float和int。用的是顺序存储。
操作集
void appendixs(List*,int,int,…);
void show_int(List);
void show_float(List);
void delete_i(List*,int);
void insert(List*,int,int,…);
float sumform(List,int,…);
arrint evalinteger(arrint,int,…);
arrint evaldecimal(arrint,int,…);
float sumlist(List,arrint,…);
函数调用如下

int main()
{
    List a=DEF(integer,5,1,2,3,4,5),b,c;
 b=DEF(integer,4,-1,1,1,1);
 c=DEF(integer,2,0,0);
 List e=DEF(list,_from,a,1,4);
 List f=DEF(decimal,3,5.0,9.8,2.6);
 a.insert(&a,1,3,0,0,0);
 a.delete_i(&a,1);
 a.appendixs(&a,_list,2,b,c); 
 a.appendixs(&a,_digit,5,10,100,1000,10000,100000);
 a.delete_i(&a,a.num);
 a.delete_i(&a,a.num);
 a.delete_i(&a,a.num);
 type(a);
    a.show(a);
    e.show(e);
    b.show(b);
    c.show(c);
    f.show(f);
    sum(a,_print,_from,1,4);
    sum(e,_print,_to,e.num);
 return 0;
 }

其中e继承a的数据,不同类型有不同操作集。用函数指针模拟类方法
显示如下

在这里插入图片描述
结构如下

struct array{
    //P_int ress;
 int num;
 float sum;
 int type;
 arrint* address;
 arrint (*eval)(List,int,...);
 // void (*sum)();
 void (*appendixs)(List*,int,int,...);
 // void (*headix)(int);
    void (*insert)(List*,int,int,...);
    void (*delete_i)(List*,int);
 //    void (*chedex)(int);
    void (*show)(List);
    P_int ress;
    P_flo   fress;

};

宏与参数

#define _print 1
#define _return 0
#define _from -1
#define _to -2
#define _digit 0
#define _list 1
#define _int 1
#define _float 0
#define type(a)\
do{\
  printf("<Type " # a":");\
  if(a.type==1)\
  {\
   printf("int>\n");\
 }\
 else\
 {\
  printf("float>\n");\
 }\
}while(0);
#define sum(a,format,num,...)\
do{\
    float j ;\
    arrint stru;stru.sum=num;\
 if(num==-1)\
  j=sumform(a,2,__VA_ARGS__);\
 else if(num==-2)\
  j=sumform(a,1,__VA_ARGS__);\
 else\
     j=sumlist(a,stru,__VA_ARGS__);\
 if(format==1)\
  printf("<" # a".sum:%.2f>\n",j);\
 else;\
}while(0)
#define DEF(type,numic,...)\
({    List _a_;                     \
     _a_=eval ## type(_a_,numic,__VA_ARGS__);        \
     _a_.address=&_a_;\
      _a_.eval=eval ## type;\
      _a_.insert=insert;_a_.delete_i=delete_i;\
      _a_.appendixs=appendixs;\
      (_a_);\
})

至于代码嘛。。有人看就贴,哪怕说我太low也行。。

尽头

又加了功能,支持数组导出和导入,生成函数等等,但是也就到此为止了。
用宏虽然能实现一系列奇技淫巧。但是用起来就是不方便。
1.c不能运算符重载,只能用函数来实现,麻烦
2.c不能函数私有,顶多不知道名字,但可以访问
3.每次都要传地址,不像py万物皆地址
4.函数参数必须说明个数
5.函数不能重载,没有默认参数(这也是用c调用windows里的api蛋疼的原因)

-------------------------end---------------------------

这一切,都指向专门oop的语言
也开启了py的历程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值