手机版程式缩排不见了 网页版才有缩排
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 等等的基本功能小弟还想不出来...
不知道各位大大有没有什么想法?