漫畫 | C語言哭了,過年回家,只有我還沒物件

碼農翻身發表於2021-02-20

C語言回家過年,遇到不少小夥伴。 

大家都在外地打拼,一年難得見面,聚到一起吃飯,都非常高興。

漫畫 | C語言哭了,過年回家,只有我還沒物件

 

漫畫 | C語言哭了,過年回家,只有我還沒物件

聽Java提到TIOBE, 正在喝酒的C語言激動起來。

自己常年在那裡排名第二,人類用自己寫的程式可真不少!可都是處於底層,在系統級程式設計,什麼作業系統,資料庫,編譯器......

這些軟體與應用層的熱鬧光景比起來,顯得有些落寞。

漫畫 | C語言哭了,過年回家,只有我還沒物件

Python端著酒杯來到C語言身邊。

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

餐桌的氣氛突然有點兒尷尬, 捅了簍子的Python趕緊招呼大家繼續喝酒。

好不容易熬到聚餐結束,C語言鬱悶地回到了冷冷清清的家中。

漫畫 | C語言哭了,過年回家,只有我還沒物件

C語言突然想起來對門的肯·湯普森,那是丹尼斯·裡奇的“好基友”,他們倆一起創造了偉大的Unix作業系統,獲得了計算機界的最高獎:圖靈獎。 

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

看到C語言滿臉沮喪, 肯·湯普森大為吃驚!

漫畫 | C語言哭了,過年回家,只有我還沒物件

肯·湯普森立刻明白了,C語言覺得自己不支援物件導向程式設計。

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

看到C語言很吃驚,肯·湯普森決定好好給他掰扯掰扯。

他真不愧是老司機,唰唰唰迅速就寫成了一段程式碼。 

漫畫 | C語言哭了,過年回家,只有我還沒物件

C語言很聰明,很快看懂了。

這裡定義了一個叫做Shape的結構體,外界只能通過相關的函式來對這個Shape進行操作,例如建立(Shape_create), 移動(Shape_move),等,不能直接訪問Shape的內部資料結構。 

雖然這裡沒有class這樣的關鍵字,資料結構和相關操作是分開寫的,看起來不太完美, 但確實是實現了封裝。

漫畫 | C語言哭了,過年回家,只有我還沒物件

肯·湯普森不吭聲,繼續寫程式碼。 

大牛的風格看來都是類似的:別瞎BB,給我上程式碼。

漫畫 | C語言哭了,過年回家,只有我還沒物件

這次定義了一個矩形(Rectangle)的結構體,其中巢狀了Shape,難道這就實現了繼承? 

C有點疑惑。

漫畫 | C語言哭了,過年回家,只有我還沒物件

通過這種組合的方式,也算是實現了繼承吧。

漫畫 | C語言哭了,過年回家,只有我還沒物件

這麼輕鬆就實現了封裝和繼承,C語言感到很興奮, 但是多型怎麼實現呢? 

這時候外邊又傳來了門鈴聲。

漫畫 | C語言哭了,過年回家,只有我還沒物件

Linus大神撇了一眼牆上的程式碼,立刻就明白了怎麼回事。 

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

 C和Go都是一臉茫然。 

漫畫 | C語言哭了,過年回家,只有我還沒物件

現在C有點明白了, 無論是Rectangle物件,還是Square物件,在呼叫Shape_area方法的時候, 都需要通過vptr這個指標找到虛擬函式表中的area方法。

對於Rectangle,找到的是Rectangel_area方法,對於Square,找到的是Square_area方法。 

struct Rectangle *r = Rectangle_create(5,5,10,10);

Shape_area((struct Shape *) r);

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

漫畫 | C語言哭了,過年回家,只有我還沒物件

相關文章