漫畫 | 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 utf8,utf8 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說他不和x,z比 找出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