當前位置:編程學習大全網 - 編程語言 - C語言用文件實現模塊程序,能實現類屬嘛?能實現面向對象的類嗎?

C語言用文件實現模塊程序,能實現類屬嘛?能實現面向對象的類嗎?

借助OOC-GCC,用面向對象的編程風格進行C語言的開發(仍是純C,輔助代碼借助有限的宏來簡化),頭文件請參見 /p/ooc-gcc,本例子通過實現壹個Animal類及其派生的Cat和Dog類,展現了用C語言模擬繼承與多態的能力.

另付了壹段CPP對比代碼,在不計算註釋保持合理換行的情況下,這個程序的實現OOC-GCC只比C++多了20多行,但是細節上,卻更加靈活,比如類的構造和析構是可控的.同時底層代碼可見,宏本身所做的工作是可見的.

另外OOC-GCC無需任何初始化的代碼,只需引入"OOStd.h"頭文件而已.

標簽: OOC GCC c MinGw OOC-GCC

代碼片段(2)

[代碼] 需要OOC-GCC的配合(請移步google code)

view sourceprint?

01

#include "OOStd.h"

02

03

CLASS(Animal){

04

char *name;

05

STATIC(Animal)

06

vFn talk;

07

};

08

int Animal_reload(Animal *THIS,char *name){

09

THIS->name=ALLOC(strlen(name)+1);

10

memcpy(THIS->name,name,strlen(name));

11

return 0;

12

}

13

int Animal_unload(Animal *THIS,void *PARAM){

14

FREE(THIS->name);

15

return 0;

16

}

17

ASM(Animal,Animal_reload,Animal_unload,NULL,NULL)

18

19

CLASS_EX(Animal,Cat){

20

STATIC_EX(Animal,Cat)

21

};

22

static void Meow(Animal *THIS){

23

printf("Meow!My name is %s!\n",THIS->name);

24

}

25

int Cat_reloadSt(StAnimal *THIS,void *PARAM){

26

THIS->talk=(void *)Meow;

27

return 0;

28

}

29

ASM_EX(Animal,Cat,NULL,NULL,Cat_reloadSt,NULL)

30

31

CLASS_EX(Animal,Dog){

32

STATIC_EX(Animal,Dog)

33

};

34

static void Woof(Animal *THIS){

35

printf("Woof!My name is %s!\n",THIS->name);

36

}

37

int Dog_reloadSt(StAnimal *THIS,void *PARAM){

38

THIS->talk=(void *)Woof;

39

return 0;

40

}

41

ASM_EX(Animal,Dog,NULL,NULL,Dog_reloadSt,NULL)

42

43

int main(){

44

Animal *a[]={

45

(void*)newDog("Jack"),

46

(void *)newCat("Lily"),

47

//Still,you can use the style below

48

NEW(Dog,"Mike"),

49

NEW(Cat,"Lucy"),

50

};

51

52

int i=0;

53

54

//for 0.9+

55

StAnimal *f=ST((a[0]));

56

57

//for 0.8 use the func below

58

//StAnimal *f=ST((Dog*)(a[0]));

59

60

for(i=0;i<4;++i){

61

f->talk(a[i]);

62

}

63

64

for(i=0;i<4;++i){

65

//this is for 0.9+

66

DEL0(a[i]);

67

68

//for 0.8+ you can use the func below

69

//delDog((Dog**)&(a[i]),NULL);

70

71

//for 0.8 only

72

//DEL0(Dog,&((Dog*)a[i]));

73

}

74

return 0;

75

}

  • 上一篇:僵屍尖叫中任務在洛杉磯場景中晃動設備啥意思
  • 下一篇:ue模型不受貼畫影響
  • copyright 2024編程學習大全網