程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> lw_oopc(C語言的面向對象)

lw_oopc(C語言的面向對象)

編輯:關於C語言

    面向對象這個概念和C語言似乎是無緣的,但如果你真的很想用怎麼辦?幸運的是有人和你的想法一樣,並且做出了實實在在的東西。我了解的比較多的是lw_oopc和ooc兩個東東。

    ooc全稱objective oriented c,作者做了大量的工作實現了c語言的封裝、多態、繼承這三種面向對象特征,還實現了所謂的虛函數。老實說,我對ooc的作者佩服的五體投地,能把c語言玩到這個程度非常了得了。ooc的文檔工作做的也不錯,但看了它的doc之後,還是覺得用起來有些麻煩。於是,又去google之,最終找到lw_oopc這個好東東。

    lw_oopc僅用了2個文件,.h及.c文件就實現了面向對象的三大因素,實現過程極為簡潔又富含技巧。lw_oopc說白了,就是定義了一堆宏,使用起來也就是調用這些宏。

 

 

還是先以一個簡單的例子入手,看看用lw_oopc做一個‘類’是怎樣的。

————————————————————————————————————————————

設計一個抽象類:Animal,屬性有:age,方法有:eat

繼承Animal,設計一個類:Dog,實現其方法

繼承Animal,設計一個類:Bird,增加方法:Fly

代碼如下所示:

***********************************************************<stdio.h>

********************************
 (*Init)(Animal* (*Eat)(Animal*  Animal_Init(Animal*->age =   Animal_Eat(Animal*********************************
 (*Init)(Dog*  Dog_Init(Dog*->  Dog_Eat(Animal*********************************
 (*Init)(Bird* (*Fly)(Bird*  Bird_Init(Bird*->  Bird_Fly(Bird*  Bird_Eat(Animal*

 

    有了這些定義,用起來就跟簡單c++的類一樣了,只是定義一個類的實例時應采用如下一種格式:

Dog* dog =->Init(dog);

調用自身的方法:

Bird* bird = ->->Fly(bird);

調用繼承的方法稍顯麻煩:

((Animal*)bird)->Eat((Animal*)bird);

或者當EXTENDS語句在定義類時並不在第一句(下一篇將揭露各個宏的真實面目)時,最穩妥也顯得繁瑣一點的方式為:

SUPER_PTR(bird, Animal)->Eat(SUPER_PTR(bird, Animal));

    是不是有那麼點意思,抽象、繼承、多態幾個概念都包含了。同樣能看出,用了lw_oopc後並沒有減少你的代碼量,而是增加了不少。但用它的目的並非是減少體力輸出,而是對軟件結構的一種改良。

    各個宏的真實面目留待下一篇揭露。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved