首页 > 能否用C语言进行面向对象的编程?

能否用C语言进行面向对象的编程?

能否单纯用C语言,用面向对象的思维来编程?


可以啊 我们有c with class


可以的,C++的对象实际上也就是用数据+虚拟函数表,来实现面向对象的继承和多态等特性,所以用C语言只要能实现类似的结构就可以了,只不过受到语法的限制,实现起来没有这么好看而已。 brew平台里面有个比较好的用C语言实现面向对象的方法,这个blog里面讲的比较清楚,可以参考下,http://blog.chinaunix.net/uid-517401-id-353373.html


你可以实现简单的封装,和不带虚函数的单继承,成员函数用全局/局部函数+特殊的命名来界定
一切对象用typedef出来的指针传递,模拟引用,继承就是在对象里写一个base成员

封装

class tag_vector
{
    int* array;
    size_t count;
};
typedef struct tag_vector* vector;

void Vector_ctor(vector this, int len);
void Vector_push_back(vector this, int value);
void Vector_erase(vector this, size_t index);
void Vector_dtor(vector this);

继承

struct base
{
    int value1;
};
struct derived
{
    struct base __base;
    int value2;
};
//成员函数还是那么写

总之想用C写面向对象,你就要把C++编译器替你生成的那些代码全都变成手写

至于多继承、虚函数、虚继承
因为多继承和虚继承是编译器为你生成了大部分的隐藏代码,不仅仅是类成员函数的定义,还有代码中的隐式转换,虚函数的调用,如果你要把这部分全用C来手写的话,参考cfront和《深入探索C++对象模型》,你会发现这会很恶心。


理论上是可以的。
因为有相当一部分面向对象语言是建立在C语言之上的(eg:obj-c,c++,Java)
很多封装都是对C的语法糖。


囿于语法的限制,纯C不能写出你现在所看到的那种oo编程,譬如class,interface等这些identity都会抛出语法错误,你可以利用有限的关键字,或者用结构体,巧妙的实现oo的思想,但那不够纯粹。先用c创造一个这样的环境,兼容c的语法规则,同时支持面对对象,这其实不是c了,这叫c++。
或者更大胆一些,完全支持oo。那就是java了。

所以,纯c是写不出面向对象的,但它可以更新自己,用c语言重新写一个c的编译器使他支持oo。但实际上它早已不是那个原来的自己。

所以,如果你一定要这么做,为什么不试试c++了?

【热门文章】
【热门文章】