C語言回家過年,遇到不少小伙伴。
大家都在外地打拼,一年難得見面,聚到一起吃飯,都非常高興。
聽Java提到TIOBE, 正在喝酒的C語言激動起來。
自己常年在那里排名第二,人類用自己寫的程序可真不少!可都是處于底層,在系統級編程,什么操作系統,數據庫,編譯器......
這些軟件與應用層的熱鬧光景比起來,顯得有些落寞。
Python端著酒杯來到C語言身邊。
餐桌的氣氛突然有點兒尷尬, 捅了簍子的Python趕緊招呼大家繼續喝酒。
好不容易熬到聚餐結束,C語言郁悶地回到了冷冷清清的家中。
C語言突然想起來對門的肯·湯普森,那是丹尼斯·里奇的“好基友”,他們倆一起創造了偉大的Unix操作系統,獲得了計算機界的最高獎:圖靈獎。
看到C語言滿臉沮喪, 肯·湯普森大為吃驚!
肯·湯普森立刻明白了,C語言覺得自己不支持面向對象編程。
看到C語言很吃驚,肯·湯普森決定好好給他掰扯掰扯。
他真不愧是老司機,唰唰唰迅速就寫成了一段代碼。
C語言很聰明,很快看懂了。
這里定義了一個叫做Shape的結構體,外界只能通過相關的函數來對這個Shape進行操作,例如創建(Shape_create), 移動(Shape_move),等,不能直接訪問Shape的內部數據結構。
雖然這里沒有class這樣的關鍵字,數據結構和相關操作是分開寫的,看起來不太完美, 但確實是實現了封裝。
肯·湯普森不吭聲,繼續寫代碼。
大牛的風格看來都是類似的:別瞎BB,給我上代碼。
這次定義了一個矩形(Rectangle)的結構體,其中嵌套了Shape,難道這就實現了繼承?
C有點疑惑。
通過這種組合的方式,也算是實現了繼承吧。
這么輕松就實現了封裝和繼承,C語言感到很興奮, 但是多態怎么實現呢?
這時候外邊又傳來了門鈴聲。
Linus大神撇了一眼墻上的代碼,立刻就明白了怎么回事。
C和Go都是一臉茫然。
現在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);
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.