17 虚指针、虚表、虚函数
1 虚指针、虚表、虚函数
对象C里面有两个m_data1?只要类里面有一个虚函数,那么就会有一个虚指针,类的大小也会多4个字节
继承:不但继承成员,还会继承函数,函数大小没人知道。继承函数继承的是调用权。
类B改写了vfunc1(); B、C都只有2个虚函数。
总共8个函数:如图所示,其中有4个虚函数,那么虚指针和虚函数是怎么关联的呢?通过中间的虚表,问题:续表的地址可以打印出来么?
问题:改写虚函数,需要把virtual关键字给去掉吗?如果去掉,还会有虚指针吗?会,因为父类有虚函数。
(*(p->vptr[n]))(p); // 这段很宝贵
问题:如何在list中放不同类型的对象?(其实也是同一类,shape)
解决:定义指向形状的指针就行了
c风格:if else,如果是圆形、如果是椭圆、如果是三角形.....这样肯定不好,增加新的子类,判断的代码又要重写。
静态绑定:变成call ***(地址) // call是汇编语言的
动态绑定的3个条件:通过指针调用、指针向上转型、调用的是虚函数
以上说的就是多态。(p):这个是this指针。
2 this:
serialize()是给部门B做的。右下角这部分很关键,this指针放到参数里。
3 const(在part1里面已经提过了)
cosnt对象不能调用非const函数,其它情况都可以:
函数重载不必管return type,为什么设计这两个函数呢,reference counting引用计数,4个一样的字符串共享同一个内容
没听懂,以后补上。
a.vfunc1():静态绑定,汇编大略懂就可以了。
动态绑定:call后面不是固定的地址了!
4 new、delete:
5 operator new、operator delete:
6 重载new、delete
7 Basic_String使用new(extra)扩充申请量
以后再补
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义