手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

31|面向对象编程第3步:支持继承和多态

你好,我是宫文学。
经过前面两节课对面向对象编程的学习,今天这节课,我们终于要来实现到面向对象中几个最核心的功能了。
面向对象编程是目前使用最广泛的编程范式之一。通常,我们说面向对象编程的核心特性有封装、继承和多态这几个方面。只要实现了这几点,就可以获得面向对象编程的各种优势,比如提高代码的可重用性、可扩展性、提高编程效率,等等。
这节课,我们就先探讨一下面向对象的这些核心特性是如何实现的,然后我会带着你动手实现一下,破解其中的技术秘密。了解了这些实现机制,能够帮助你深入理解现代计算机语言更深层次的机制。
首先,我们先来分析面向对象的几个核心特性,并梳理一下实现思路。

面向对象的核心特性及其实现机制

第一,是封装特性。
封装是指我们可以把对象内部的数据和实现细节隐藏起来,只对外提供一些公共的接口。这样做的好处,是提高了代码的复用性和安全性,因为内部实现细节只有代码的作者才能够修改,并且这种修改不会影响到类的使用者。
其实封装特性,我们在上两节课已经差不多实现完了。因为我们提供了方法的机制,让方法可以访问对象的内部数据。之后,我们只需要给属性和方法添加访问权限的修饰成分就可以了。比如我们可以声明某些属性和方法是 private 的,这样,属性和方法就只能由内部的方法去访问了。而对访问权限的检查,我们在语义分析阶段就可以轻松做到。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • 奋斗的蜗牛
    类型系统改成Structural,用vtable的话,应该要保证函数在所有类型的vtable的位置都是一样的
    1
  • ifelse
    学习打卡
    归属地:浙江
  • jack123
    为什么汇编里面生成的Cat对象是24字节呢? 它父类一个double 子类一个double这里不是只有16bit吗?还要算2个虚指针大小吗?
  • 写点啥呢
    请教宫老师,asm_x86-64视线中,vistiFunctionCall对于super()这种调用是不做任何生成代码操作,我理解次数是应该去变成一次对父类constructor函数的调用,请问对么?
  • 写点啥呢
    请问宫老师,asm_x86-64实现中,使用类的vtable作为PlayObject实例的头部,代码中各个类的vtable是如何产生的呢?在代码里没有看到,请指点下,谢谢
  • D
    把静态编译语言的多态实现机制也讲解到了,宫老师讲的很好啊! golang 的interface 的机制也借鉴了C++的vtable 实现机制,有些类似。
  • chris
    关于实现多态的其他方式, hotspot有一个inline cache优化, 不知道能不能算.
  • 奋斗的蜗牛
    太赞了,原来这些高级特性是这么实现的
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部