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)扩充申请量

以后再补

 

posted @   妖山鬼店  阅读(136)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示