以前看见有人写用C来OO,但文章看起来总是不知道所云,学不要什么东西,其实在公司开发的时候,很多C程序还是按OO的思想来开发的。于是总结一下,也希望讨论一下C的OO方法。
C其实是一种很自由的语言,而OO是一种思想,同时也是一种限制,只要自己在C中加上这种限制,也能在C中实现一定程度的OO。
比如,OO中最重要的是封装。C最大的特点就是开放。但要是有封装的思想来写C,也未尝不可。
在C++中,我们的类这样的表示(设有类A) :
class A
{
public:
function1();
function2();
private:
int i;
int j;
}
而我要用C来写这样的类封装的代码(只能说是有明显的标志分开)就是这样:
struct c_A_
{
int i;
int j;
}
typedef c_A_ A;
cA_function1(A *,其它参数);
cA_function2(A *,其它参数);
使用的时候自学一些,一般也不会出很大的问题。
然后继承,我们当然不可能用简单的方法来完成C++那么强大的继承,但要做到继承也不是很难,比如:
struct c_B_
{
A a;
int m;
int n;
}
typedef c_B_ B;
cB_function1(B *,其它参数);
cB_function2(B *,其它参数);
当要使用A的函数时就用:
cA_function1(&(B.A),其它参数);
cA_function2(&(B.A),其它参数);
这只是两个主要的问题,但多态的问题倒是不容易想到解决的办法。请大家讨论一下这种访求的可行性。
我认为OO其实是一种方法,在没有技术支持的情况下,我们也一样可以写出很OO的C代码来。
C其实是一种很自由的语言,而OO是一种思想,同时也是一种限制,只要自己在C中加上这种限制,也能在C中实现一定程度的OO。
比如,OO中最重要的是封装。C最大的特点就是开放。但要是有封装的思想来写C,也未尝不可。
在C++中,我们的类这样的表示(设有类A) :
class A
{
public:
function1();
function2();
private:
int i;
int j;
}
而我要用C来写这样的类封装的代码(只能说是有明显的标志分开)就是这样:
struct c_A_
{
int i;
int j;
}
typedef c_A_ A;
cA_function1(A *,其它参数);
cA_function2(A *,其它参数);
使用的时候自学一些,一般也不会出很大的问题。
然后继承,我们当然不可能用简单的方法来完成C++那么强大的继承,但要做到继承也不是很难,比如:
struct c_B_
{
A a;
int m;
int n;
}
typedef c_B_ B;
cB_function1(B *,其它参数);
cB_function2(B *,其它参数);
当要使用A的函数时就用:
cA_function1(&(B.A),其它参数);
cA_function2(&(B.A),其它参数);
这只是两个主要的问题,但多态的问题倒是不容易想到解决的办法。请大家讨论一下这种访求的可行性。
我认为OO其实是一种方法,在没有技术支持的情况下,我们也一样可以写出很OO的C代码来。