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语言哭了,过年回家,只有我还没对象相关推荐

  1. 漫画 Go 语言 纯手绘版

    漫画 Go 语言 纯手绘版 - haojiahuo - 掘金小册 小册介绍 您是否对Go语言充满兴趣,却又没有时间学习!是否有文字恐惧症怕看大篇幅的文字,那么我们专门花费大量的时间将一些难以理解的逻辑 ...

  2. R语言max函数min函数计算各种数据对象最大值最小值实战

    R语言max函数min函数计算各种数据对象最大值最小值实战 目录 R语言max函数min函数计算各种数据对象最大值最小值实战 #基本语法

  3. R语言保存加载工作空间或者工作空间数据对象实战(Save Load RData Workspace)

    R语言保存加载工作空间或者工作空间数据对象实战(Save & Load RData Workspace) 目录 R语言保存加载工作空间或者工作空间数据对象实战(Save & Load ...

  4. R语言数据可视化 ggplot2基础3 添加几何对象

    R语言数据可视化 ggplot2基础3 添加几何对象 数据的统计变换 添加几何对象 数据的统计变换 添加几何对象 上一讲我们介绍的是如何创建散点图,这一讲我们介绍如何创建其他类型的图,以及怎么创建有多 ...

  5. 又一门国产数据库语言诞生了,比SQL还好用

    一.数据库语言的目标 1.1 数据库是做什么的 数据库这个软件,名字中有个"库"字,会让人觉得它主要是为了存储的.其实不然,数据库实现的重要功能有两条:计算.事务!也就是我们常说的 ...

  6. r语言library什么意思_还没张口对方就知道你是什么意思了?你的肢体语言出卖了你哦~...

    原标题:还没张口对方就知道你是什么意思了?你的肢体语言出卖了你哦~ لغة الجسد 肢体语言 يستخدم الكثير منّا في أغلب الأوقات بعض الحركات و ال ...

  7. R语言缺失值:is.na函数查看数据对象中是否包含缺失值NA、特定数据编码为编码为缺失值NA、na.rm=TRUE参数获得有效的计算结果、complete.cases函数筛选数据、na.omit函数

    R语言缺失值:is.na函数查看数据对象中是否包含缺失值NA.特定数据编码为编码为缺失值NA.na.rm=TRUE参数获得有效的计算结果.complete.cases函数筛选数据.na.omit函数 ...

  8. [C语言源代码][数据存储+指针] 谁还不会司空震?给我冲!

    #define _CRT_SECURE_NO_WARNINGS //数据在内存的存储 //整形: char也归纳为了整形类型了 因为char字符对应的是ASCII值(相对应的具体数字) //#incl ...

  9. C语言已经自学完了,数电模电电路都还没学,学stm32会有阻碍吗

    C语言已经自学完了,数电模电电路都还没学,学stm32会有阻碍吗 起初就是学个c语言,跟着郭天祥视频进修,一通开发.大一的电路知识仅限于欧姆定律,电容滤波,二极管正向导通这样吧.但也搞得红红火火地,感 ...

最新文章

  1. python 生命之花_python股票用什么电脑配置:贵州合力股票价格多少钱_XAC配资之家...
  2. 数据中心网络架构 — 云数据中心网络 — 新型叶脊二层网络架构
  3. eigrp配置实验_思科CCIE认证技术详解IPv6协议下的静态路由配置
  4. Ansible Playbook详解
  5. 英语笔记3(git)
  6. 查看用户过期linux,linux下控制帐户过期的多种方法讲解
  7. Enhancement set functionality missing in some system
  8. c语言实现字母转化为unicode码,用C语言实现中文到unicode码的转换
  9. Detection of Extraterrestrial KMP匹配 重复k次子串 好题
  10. 还有戏!尽管疫情严重,苹果公司仍可能4月推出iPhone 9
  11. 一代经典框架 Layui 落幕,是否预示着一个时代的结束?
  12. python是什么课程-python是什么(python是什么课程)
  13. PHP 7天前的时间戳
  14. LNMP架构 源码安装nginx+mysql+php+memcache+论坛
  15. SaaS应用出路何在?
  16. win7下cmd乱码
  17. Spring boot(三):Web 进阶
  18. LeetCode. 15 - 三数之和
  19. Learning RoI Transformer for Detecting Oriented Objects in Aerial Images
  20. MIMO技术与链路容量

热门文章

  1. Debian11.2.0用iso制作本地源
  2. pytorch 34 mmdetection配置文件中指定backbone与neck
  3. 三、松灵课堂 | SCOUT的仿真使用
  4. sql中=null和is null区别
  5. php农历生日计算,计算农历的函数
  6. VXLAN中EVPN技术详解(二)——EVPN与VXLAN分布式网关
  7. 会python的人多吗_为什么很多人喜欢 Python?
  8. Android/安卓 简单的SeekBar使用以及问题解决
  9. TrimLeft C语言实现
  10. jquery mobile java_jQuery Mobile 简介