漫画 | 春节期间,Unix之父和Linux之父联手拯救了C语言!

C语言回家过年,遇到不少小伙伴。 

大家都在外地打拼,一年难得见面,聚到一起吃饭,都非常高兴。

7fb1b980a576e53de6ec1e589f174533.png

b5aa382d71de25a9e8309370ab0d9728.png

听Java提到TIOBE, 正在喝酒的C语言激动起来。

自己常年在那里排名第二,人类用自己写的程序可真不少!可都是处于底层,在系统级编程,什么操作系统,数据库,编译器......

这些软件与应用层的热闹光景比起来,显得有些落寞。

b03e675f07261c05e072db4fd716e32e.jpeg

Python端着酒杯来到C语言身边。

1b67d2197ad00ca050f03fb20d0b8e52.jpeg

0d2264af71ac985e688dc3f6d597d90c.jpeg

餐桌的气氛突然有点儿尴尬, 捅了篓子的Python赶紧招呼大家继续喝酒。

好不容易熬到聚餐结束,C语言郁闷地回到了冷冷清清的家中。

e68249a6f509e9089962573321c4e6ef.jpeg

C语言突然想起来对门的肯·汤普森,那是丹尼斯·里奇的“好基友”,他们俩一起创造了伟大的Unix操作系统,获得了计算机界的最高奖:图灵奖。 

03f56917d55129e532fa0cb7d1f34177.jpeg

6e26be48abb21ca1a5f170ce1db50664.jpeg

2310c331fee3873d20bf1727cfbfec11.jpeg

看到C语言满脸沮丧, 肯·汤普森大为吃惊!

9f97012f90996e0575ae9d488f1f5988.jpeg

肯·汤普森立刻明白了,C语言觉得自己不支持面向对象编程。

f6d42bb54f4cf302ea845d72ec97e01e.jpeg

3be35e335e21310b403ae168db16c9fa.jpeg

看到C语言很吃惊,肯·汤普森决定好好给他掰扯掰扯。

他真不愧是老司机,唰唰唰迅速就写成了一段代码。 

54dee1e0e3dc95b62c3c8e45cdf3fff4.jpeg

C语言很聪明,很快看懂了。

这里定义了一个叫做Shape的结构体,外界只能通过相关的函数来对这个Shape进行操作,例如创建(Shape_create), 移动(Shape_move),等,不能直接访问Shape的内部数据结构。 

虽然这里没有class这样的关键字,数据结构和相关操作是分开写的,看起来不太完美, 但确实是实现了封装。

0a88379a198a4e09444eb9afe4629c9c.jpeg

肯·汤普森不吭声,继续写代码。 

大牛的风格看来都是类似的:别瞎BB,给我上代码。

db9d7d189b0fb06eed4bec7619f518b6.jpeg

这次定义了一个矩形(Rectangle)的结构体,其中嵌套了Shape,难道这就实现了继承? 

C有点疑惑。

fe46dc17d10cfc01bcd8ad1ad43cf422.jpeg

通过这种组合的方式,也算是实现了继承吧。

98738a37b8801c19fa6f61fb48bb957c.jpeg

这么轻松就实现了封装和继承,C语言感到很兴奋, 但是多态怎么实现呢? 

这时候外边又传来了门铃声。

98f677270832bf94c37729c5bd6fcf59.jpeg

Linus大神撇了一眼墙上的代码,立刻就明白了怎么回事。 

18ca8da1a65828395174861329db610b.jpeg

71463957c0fa26fe939a931f7fca7a81.jpeg

 C和Go都是一脸茫然。 

8b745b9009ab5f983e750762e56e3e78.jpeg

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

bae234e54efeac1d8adbdceeee9944ac.jpeg

393c7345c54472304b71b31df96c744c.jpeg

全文完,觉得不错的话点个赞或者在看吧!

更多精彩,尽在“码农翻身”!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值