多态学习笔记

您所在的位置:网站首页 邮编都是6位吗为什么 多态学习笔记

多态学习笔记

2023-06-05 08:09| 来源: 网络整理| 查看: 265

目录

1.什么是多态: 

 2.多态的条件(虚函数)

3.override

4.抽象类

 5.多态原理层

1.虚函数表

2.用程序打印虚表

6.动态绑定和静态绑定

7.虚表虚基表的位置​编辑

1.什么是多态: 

 

 2.多态的条件(虚函数)

:1.虚函数的重写

(三同中的参数同指的是类型)

    2.父类的指针或者引用去调用

 好题:

1.

2. 没有多态就没有多态继承:

 3.p指向的仍是B的地址

3.override

(看175注释)

4.抽象类

 5.多态原理层 1.虚函数表

2.用程序打印虚表

(typedef一个函数指针原本写法,下一个图才是正确写法)

(void 指针可以指向任意类型的数据)

正确写法 typedef void(*VF_PTR)();

函数参数是函数指针的数组(想想虚表是个啥)

                  这里回忆一下函数指针

                  

                 指针定义的话就是名字前加*,然后括起来

)

两种写法

 (64位下指针是8个字节;得用longlong(8个字节))

类比int去理解: (其实我没有类比,你得清楚传的参数是什么)

对比下面地址,可以看到虚表地址大概在常量区

;;如果继承两个类,有两张表,那么第二张表的地址在哪里?

其实更重要的问题是:如果继承的两个类都没有这个类的虚函数,那么这个虚函数放哪张表里

;;然后有个很深很不容易理解的问题:

func1都重写了,调用的都是子类的func1,为什么两张表中这个函数的地址不一样

 ecx修正this指针的位置

6.动态绑定和静态绑定

静态多态是通过重载和模板技术实现,在编译的时候确定。 动态多态通过虚函数和继承关系来实现,执行动态绑定,在运行的时候确定。

7.虚表虚基表的位置

(不用管)虚基表第一个放的是虚表的偏移量,64位下变-8: 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3