C語言中的類模擬(C 程式設計思想)

2021-08-23 13:58:50 字數 1130 閱讀 1462

在物件導向

1.例項:下面先從乙個小例子看起

#ifndef c_class

#define c_class struct

#endif

c_class a ;

c_class b;

void b_f2(c_class b *bthis)

void a_foo(c_class a *athis)

void b_foo(c_class b *bthis)

void a_creat(struct a* p)

void b_creat(struct b* p)

int main(int argc, char* argv)

輸出結果:

11it is b.c=13

it is a.a=1

it is b_fun

2.類模擬解說:

我在網上看見過一篇文章講述了類似的思想(據說c++程式設計思想上有更加詳細的解說,可惜我沒空看這個了,如果有知道的人說一說吧)。但是就象c++之父說的:「c++和c是兩種語言」。所以不要被他們在語法上的類似就混淆使用,那樣有可能會導致一些不可預料的事情發生。

其實我很同意這樣的觀點,本文的目的也不是想用c模擬c++,用乙個語言去模擬另外乙個語言是完全沒有意義的。我的

c語言的一大問題是結構鬆散,雖然現在好的大型程式都基本上按照乙個功能乙個檔案的設計方式,但是無法做到更小的顆粒化――原因就在於它的資料和函式的脫節。類和普通的函式集合的最大區別就在於這裡。類可以例項化,這樣相同的函式就可以對應不同的例項化類的變數。

自然語言的乙個特點是概括:比如說表。可以說手錶

但是在c語言中,這樣做是不可能的(至少語言本身不提供這樣的功能)。c語言中,如果各個函式要共享乙個變數,必須使用全域性變數

個人認為:兩種形式(陣列和模擬類)並無本質的區別(如果不考慮虛函式的應用的話),它們的唯一區別是:陣列的辦法將空間申請放在了「模組」內,而類模擬的辦法將空間申請留給了外部,可以說就這一點上,類模擬更加靈活。

3.其他的話:

我的上述思想還是很不成熟的,我的目的是想讓c語言程式設計者能夠享受物件導向程式設計的更多樂趣。我們僅僅面對的是浩瀚的「黑箱

而更大的目的是促使這樣的黑箱的產生。或許有一天,一種效率很好,結構很好的語言將會出現。那個時候程式設計是不是就會象說話一樣容易了呢

C語言中的物件導向 C語言中的類模擬

在物件導向的語言裡面,出現了類的概念。這是程式設計思想的一種進化。所謂類 是對特定資料的特定操作的集合體。所以說類包含了兩個範疇 資料和操作。而c語言中的struct僅僅是資料的集合。li 1978 163.com 1 例項 下面先從乙個小例子看起 ifndef c class define c c...

C語言中的類模擬和多型

1 例項 下面先從乙個小例子看起 ifndef c class define c class struct endif c class a c class b void b f2 c class b bthis void a foo c class a athis void b foo c clas...

C 語言中的元類程式設計(五)

在上一節中,我們得到了meta worker的第乙個版本,但是那個版本還不能使用,因為它只有對worker類的描述資訊 除regcutpoint外 我們還需要為它新增一些方法去操作它的物件 注意,它的物件不是worker類的物件,而是worker類本身 那麼我們需要為它新增一些什麼方法呢?我們知道,...