[討論] 用C來看物件導向(非學術)
手機版程式縮排不見了 網頁版才有縮排
C 不是物件導向語言,但是我卻在C裡看見了物件導向的影子
如果你有用C寫大而複雜的程式的經驗,你會發現,有好幾行的程式碼都為了完成同一件
事情而存在
例如,程式裡有"計算機功能",它需要讀取stdin之後進行運算、判斷,然後輸出stdout
這樣一個工作可能要由好多好多行程式碼來共同完成,這讓程式碼的閱讀變得困難了一些
,因為這組程式碼共同完成一個工作,單一行的意義對人類而言不大
於是我們會興起一個念頭,要是一行程式碼可以完成一件工作,那該有多好!
C語言提供的解決方法就是函式
物件導向則提供了管理這些函式的方法,它把函式歸類
至於為什麼C可以看到物件導向的影子呢?
前幾天在上計概課的時候,就有想到,C 的 struct 好像有點像物件導向
例如電子雞遊戲
/*
* 定義"雞"
*/
typedef struct Chicken {
char *name;
int eggsize;
int (* hungry)(int);
} Chicken;
/*
* 產生已初始化的新物件
*/
Chicken newChicken() {
int hungry(int time) {
if(time >= 999999)
printf("I am hungry!!!\n");
wait(60);
return 0;
};
Chicken c = {
.name = "default name",
.eggsize = 3,
.hungry = &hungry
};
return c;
}
/*
* 主程式
*/
int main(int argc, char *argv[]) {
Clock ck = newClock();
Chicken john = newChicken();
john.name = argv[1];
john.eggsize = 99;
while(!john.hungry(ck.getTime()));
return 0;
}
如果在標頭加上
#define new
#define Chicken() newChicken()
就可以 Chicken c = new Chicken(); 了
但是 this super 等等的基本功能小弟還想不出來...
不知道各位大大有沒有什麼想法?
--
Sent from my Android
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.142.227
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1418464088.A.D85.html
※ 編輯: OPIV (114.37.142.227), 12/13/2014 18:02:31
推
12/13 18:02, , 1F
12/13 18:02, 1F
→
12/13 18:03, , 2F
12/13 18:03, 2F
→
12/13 18:04, , 3F
12/13 18:04, 3F
→
12/13 18:04, , 4F
12/13 18:04, 4F
→
12/13 18:05, , 5F
12/13 18:05, 5F
→
12/13 18:05, , 6F
12/13 18:05, 6F
→
12/13 18:07, , 7F
12/13 18:07, 7F
→
12/13 18:09, , 8F
12/13 18:09, 8F
→
12/13 18:09, , 9F
12/13 18:09, 9F
→
12/13 18:09, , 10F
12/13 18:09, 10F
→
12/13 18:10, , 11F
12/13 18:10, 11F
→
12/13 18:11, , 12F
12/13 18:11, 12F
→
12/13 18:12, , 13F
12/13 18:12, 13F
→
12/13 18:12, , 14F
12/13 18:12, 14F
→
12/13 18:33, , 15F
12/13 18:33, 15F
推
12/13 22:07, , 16F
12/13 22:07, 16F
→
12/14 00:03, , 17F
12/14 00:03, 17F
→
12/14 19:19, , 18F
12/14 19:19, 18F
→
12/14 19:20, , 19F
12/14 19:20, 19F
※ 編輯: OPIV (114.37.133.58), 12/14/2014 20:51:00
推
12/14 23:04, , 20F
12/14 23:04, 20F
推
12/15 06:32, , 21F
12/15 06:32, 21F
→
12/15 06:33, , 22F
12/15 06:33, 22F
推
12/15 06:35, , 23F
12/15 06:35, 23F
→
12/15 06:36, , 24F
12/15 06:36, 24F
→
12/15 06:37, , 25F
12/15 06:37, 25F
→
12/15 06:38, , 26F
12/15 06:38, 26F
→
12/15 12:26, , 27F
12/15 12:26, 27F