1. 程式人生 > >漫畫 | C語言哭了,過年回家,只有我還沒物件

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

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);

相關推薦

漫畫 | C語言過年回家只有物件

C語言回家過年,遇到不少小夥伴。  大家都在外地打拼,一年難得見面,聚到一起吃飯,都非常高興。   聽Java提到TIOBE, 正在喝酒的C語言激動起來。 自己常年在那裡排名第二,人類用自己寫的程式可真不少!可都是處於底層,在系統級程式設計,什麼作業系統,資料庫,編譯器......

過年回家的航班將能如時抵達!

過年 幸福 允許 eat any 大片 響應事件 容易 博客 有一種定律,叫害怕啥天趕上啥。有一種情懷,叫無論多遠都要回家過年。然而常言道,“人在江湖飄,哪能不中招?” 比如突然被告知,“天氣原因航班不能按時起飛!”頓時,欲哭無淚心如死灰。那麽,能否構建一種應用,增強實現技

C語言程式設計時常見的錯誤看看你中招嗎?

雲上傘 C編譯的程式對語法檢查並不像其它高階語言那麼嚴格,這就給程式設計人員留下“靈活的餘地”,但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學C語言的人來說,經常會出一些連自己都不知道錯在哪裡的錯誤。看著有錯的程式,不知該如何改起,通過對C的學習,積累了一些C程式設計時常犯的錯誤,

C語言實現:一個數組中只有兩個數字是出現一次其他所有數字都出現兩次。

思路:異或陣列中的每一個數,最終出現的結果是兩個只出現一次數字的異或結果,,因為兩個陣列不一樣,所以異或結果不為0,二進位制結果有一個是1.在結果中找到第一個為1的位置,記為n,然後陣列右移n位,為1,為0,分別輸出兩個數#include <stdio.h> #i

C語言的FOR迴圈怎樣掌握福利到如何學習C語言for迴圈

for迴圈的學習是整個C語言進度的里程碑,也只有將for迴圈瞭解精通,才能夠更好的使用C語言程式設計。For迴圈相對於指標等多方面的知識相對於基礎,是初學者前期要掌握的,所以今天就為大家講解部分C語言for迴圈的知識,希望會有所幫助。 首先完成我們程式碼程式設計的輪廓,在我們之前的學習中已經

C語言——輸入一個字符串將連續數字字符轉換為數字

一個 [0 fine main span nbsp 輸出 print ont 輸入一個字符串,內有數字和非數字字符,例如: A123cdf 456.78cpc876.9er 849.1 將其中連續的數字作為一個實數,依次存放到一數組a中。例如123存放在a[0],456.

C語言編碼轉換gb2312 to utf8utf8 to gb2312 代碼GCC編譯支持Windows、Linux

inb style fine mem amp blog linu print from 編譯:gcc -o f.exe f.c -liconv #include <stdio.h> #include <stdlib.h> #include <

C語言模擬實現strstr函數strrstr 函數

c語言 模擬實現 strstr strstr和strrstr已經算是字符串中相對比較難的了,但是只要我們善於分析,解剖字符串,就會化難為易。其實學習代碼的過程中需要我們靜下心來分析,理解。 srtstr函數的功能及用法 原型:char *strstr(const char *dst, const

C語言版——點亮LED燈深入到棧

nand啟動 等於 halt 過程 畫出 示意圖 color 常見 defined 在上一篇進行了匯編語言的編寫之後,我們采用C語言來編寫程序,畢竟C語言才是我們使用最多的語言。 僅僅是點亮LED燈顯然太過於簡單,我們需要分析最後的反匯編,了解函數調用棧,深入C語言骨髓去分

C語言超級搞笑的代碼冷笑話我們程序員也會講的啊!

adding fad 放松 世界 搞笑 程序 fan 超級 soft 百年修得足下點擊本文歡迎來到"C語言基礎"專題,今天我們放松一天,不學習知識,來看下大千世界的千奇百怪的C語言代碼,你見過那些?1.關於隨機數這回事 這個隨機數有點意思哦。2.真亦假

C語言 函式返回一位陣列二維陣列

方法一: 萬能的結構體:構造陣列的結構體,將函式型別定義為此型別 但是考試的時候應該不太方便寫結構體,寫不下也會很麻煩,故介紹方法二 方法二: 指標傳遞: 1、返回一維陣列 例子:將陣列每一位加一: #include<stdio.h> #define N 10 int

一段C語言和彙編的對應分析揭示函式呼叫的本質

一段C語言和彙編的對應分析,揭示函式呼叫的本質 2018年09月30日 13:32:19 sdulibh 閱讀數:17 本文作者周平,原創作品轉載請註明出處 首先對會涉及到的一些CPU暫存器和彙編的基礎知識羅列一下:   16位、32位、64

懶癌晚期學圖論的時候自己用C語言個求可達性矩陣的演算法~

可達性矩陣演算法~ 直接上程式碼 #include <iostream> #include <cstring> using namespace std; #define n 5 void print(int a[n][n]); void print1(int a[n][n]); v

C語言第三天-資料型別if switch,for while

背會!!! 格式字元有d,o,x,u,c,s,f,e,g等。  如 %d整型輸出,%ld長整型輸出, %o以八進位制數形式輸出整數, %x以十六進位制數形式輸出整數,或輸出字串的地址。 %u以十進位制數輸出unsigned型資料(無符號數)。注意:%d與%u有無符號的數

c語言 用scanf函式輸入資料舉例並分析錯誤原因

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

c語言 兩個乒乓球隊進行比賽各出3人A說他不和x比C說他不和xz比 找出3對賽手的名單

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C語言一個外賣管理系統

用C語言做了一個外賣管理系統,則希望可以模擬網上訂餐,店家工作,專人管理的過程。並實現註冊與登入以及基本資訊的輸出。各位大佬不喜勿噴   管理員端可以檢視店鋪資訊,店鋪資訊修改(分為增刪改查),處理申請店鋪,和修改本人資訊。 使用者端分為使用者相關(為使用者本人對自己資訊的操作),檢視

資料結構實驗-C語言-二叉樹的建立前、中、後序遍歷的遞迴演算法和非遞迴演算法求葉子結點數目求二叉樹深度判斷二叉樹是否相似求二叉樹左右子樹互換二叉樹層序遍歷的演算法判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

資料結構--C語言--逆序建立單鏈表遍歷單鏈表在單鏈表第5個元素前插入一個值為999的元素刪除單鏈表第5個元素

#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define LEN sizeof(struct LNode) struct LNode{ int data; struct LNode

C語言】輸入一個整數N求N以內的素數之和

【C語言】輸入一個整數N,求N以內的素數之和   /* ============================================================================ Name