多态学习笔记 |
您所在的位置:网站首页 › 邮编都是6位吗为什么 › 多态学习笔记 |
目录 1.什么是多态: 2.多态的条件(虚函数) 3.override 4.抽象类 5.多态原理层 1.虚函数表 2.用程序打印虚表 6.动态绑定和静态绑定 7.虚表虚基表的位置编辑 1.什么是多态: :1.虚函数的重写 (三同中的参数同指的是类型) 2.父类的指针或者引用去调用 好题: 1. 2. 没有多态就没有多态继承: 3.p指向的仍是B的地址 (看175注释) (typedef一个函数指针原本写法,下一个图才是正确写法) (void 指针可以指向任意类型的数据) 正确写法 typedef void(*VF_PTR)(); 函数参数是函数指针的数组(想想虚表是个啥) ( 这里回忆一下函数指针 指针定义的话就是名字前加*,然后括起来 ) 两种写法 (64位下指针是8个字节;得用longlong(8个字节)) 类比int去理解: (其实我没有类比,你得清楚传的参数是什么) 对比下面地址,可以看到虚表地址大概在常量区 ;;如果继承两个类,有两张表,那么第二张表的地址在哪里? 其实更重要的问题是:如果继承的两个类都没有这个类的虚函数,那么这个虚函数放哪张表里 ;;然后有个很深很不容易理解的问题: func1都重写了,调用的都是子类的func1,为什么两张表中这个函数的地址不一样 ecx修正this指针的位置 静态多态是通过重载和模板技术实现,在编译的时候确定。 动态多态通过虚函数和继承关系来实现,执行动态绑定,在运行的时候确定。 7.虚表虚基表的位置![]() (不用管)虚基表第一个放的是虚表的偏移量,64位下变-8: |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |