记录C语言面向对象的一些思考

 

 

C语言与C++的老大之争

最近一直在尝试用C语言尝试写设计模式,但是陆续写了几个模式后。蓦然发现,很简单的逻辑代码,用C++/java结合设计模式,代码写得非常舒服、非常优雅。但是一旦用C语言来实现,立马变得无比臃肿。我不得不开始怀疑C语言是不是不适合潮流的发展了?

花了几天的空间时间,不断地去思索这个问题。自己总结了一下,主要有这几方面原因:

  • C++的类构造。C++的new关键字通过构造函数可以快速地获取实际需要的对象。而C语言的结构体要通过malloc获取内存后,手动地初始化每一个成员。

  • C++类成员函数。C++在定义类的时候里面的成员函数是可以直接实例化的,而C语言的结构体只能接受函数指针类型的变量,使用该函数指针之前需要手动实例化。

  • C++类继承。C++父子类之间可以来去自如地切换使用,而C语言要明确地进行强制类型转换以消除编译器的警告。

抱着这些问题去思考、去与同事讨论、争辩。同事的观点是:C语言之所以高效、历久弥新,就是C语言是一门实用主义的语言。它可以在不同的使用场合,选择摒弃一部分面向对象语言的特性,来获取高效率的执行速度和更小的内存空间,哪怕牺牲部分的可维护性和可扩展性!

我暗自反思一番,C语言的使用场合,确实都是高效率和低内存的需求场景。嵌入式是如此、操作系统是如此、各种安卓SDK开发包更是如此。

因此C语言和C++发展到今天,其实已经差异越来越大了。各自在不同的垂直领域都有自己的用武之地。相互间没有直接的可比性,所以无论C党还是C++党,对语言优劣之争是大可不必的。

 

一个有趣的宏文件

在了解C语言实现C++语言特性的时候,在GitHub发现了有人做了一个有趣的项目。就是通过一个宏文件,可以一定程度上地用C语言来class和new关键字来模仿C++的类定义和类构建。这里附上宏文件源码:lw_oopc.h

#include "malloc.h"
#ifndef LOOPC_H
#define LOOPC_H

#define CLASS(type)\
typedef struct type type;
struct type

#define CTOR(type) \
void* type##NEW()\
{\
  struct type *t;\
  t = (struct type*)malloc(sizeof(struct type));
  
#define CTOR2(type,type2)\
void* type2##New()\
{\
  struct type *t;\
  t = (struct type*)malloc(sizeof(struct type));
  
#define END_CTOR return (void*)t;};
#define FUNCTION_SETTING(f1,f2) t->f1=f2;
#define IMPLEMENTS(type)\
typedef struct type type;\
struct type
#endif

下一篇通过一个例子分析这个宏文件的原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值