c的数据机制

从读《面向对象设计导论》(C.Thomas Wu )时,它就告诉我,面向对象是以数据为中心的。可惜我对真正的使用class来做程序每什么经验,我所能接触到的,还没有复杂到,或者说,面向过程已经很好的解决了这个问题。

最近又拿回来c,看到了一篇关于c中变参数的文章,和csdn文档首页上放置了很久的c中的面向对象。

看了。http://dev.csdn.net/article/29/29250.shtm 可惜csdn上的那篇文章好像只是“形似”,在使用struct和一些些指针后做了两个类出来。又继承又多态。我的道行还不够高,只是在读c算法时,在一级ADT中,我却嗅到了OO的气息。ADT就是抽象数据类型的缩写(abstract data type)。说白了和数据结构是一家子。在良好的封装了数据以后,通过接口来实现数据和算法的分离,这不就已经很OO了么?

很长时间里,人们在说类和结构没有区别,除了结构不能初始化以外。

我不知道在做了良好了ADT后,怎么来实现它的面向对象特性,我想已经不远了,让我再往里走走看.

下面的是一个复数的结构:


-----
typedef struct { float Re; float Im; } Complex;   //复数ADT
Complex COMPLEXinit(float, float);
  float Re(Complex);
  float Im(Complex);
Complex COMPLEXmult(Complex, Complex);
-----
#include "COMPLEX.h"                          //接口实现
Complex COMPLEXinit(float Re, float Im)
  { Complex t; t.Re = Re; t.Im = Im; return t; }
float Re(Complex z)
  { return z.Re; }
float Im(Complex z)
  { return z.Im; }
Complex COMPLEXmult(Complex a, Complex b)
  { Complex t;
    t.Re = a.Re*b.Re - a.Im*b.Im;
    t.Im = a.Re*b.Im + a.Im*b.Re;
    return t;
  }


-----
typedef struct complex *Complex;                     
//复数ADT句柄
Complex COMPLEXinit(float, float);
  float Re(Complex);
  float Im(Complex);
Complex COMPLEXmult(Complex, Complex);
-----                                                                        //实现
#include < stdlib.h >
#include "COMPLEX.h"
struct complex { float Re; float Im; };
Complex COMPLEXinit(float Re, float Im)
  { Complex t = malloc(sizeof *t);
    t->Re = Re; t->Im = Im;
    return t;
  }
float Re(Complex z)
  { return z->Re; }
float Im(Complex z)
  { return z->Im; }
Complex COMPLEXmult(Complex a, Complex b)
  {
    return COMPLEXinit(Re(a)*Re(b) - Im(a)*Im(b), 
                       Re(a)*Im(b) + Im(a)*Re(b));
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值