C++学习一虚函数的实现方式
来源:互联网 发布:mac如何访问共享文件夹 编辑:程序博客网 时间:2024/06/06 09:45
在基类的成员函数中如果有使用virtual关键字修饰的函数,实例化时就会产生一张对应这个类的对象的虚函数表,而这个函数本来应该是函数入口的,而现在变成了虚函数表的入口地址。然后通过虚函数表内找到函数的地址。
比如有这样两个类
class Base {public:virtual int fun() {return 0;}};class BaseSon:public Base {};其中:
Base这个基类的fun函数是虚函数,实例化后,在这里存在的函数指针地址会被存到这个对象对应的一个虚函数表中,而这里的地址被换成了虚函数表地址。
Baseson继承的Base的fun函数,但是也是存在一个虚函数表(这张表和上面那张不是同一张),同样里面有Base的fun函数的函数地址(入口地址)。而且重点是,这个地址在这两张表中的相对位置相同,也就是偏移量相同。
class Base {public:virtual int fun() {return 0;}};class BaseSon:public Base {public:virtual int fun(){return 1;}};在这种情况中,这里Base类和上面一致。但是BaseSon类的虚函数表内的那个地址被换成了BaseSon自己的那个return1的fun函数的入口地址。
所以,可以通过使用基类的指针来访问派生类的fun函数,这样就可以实现动态多态,同一个命令对不同对象使用时,实现不同的功能。
0 0
- C++学习一虚函数的实现方式
- C的方式实现可变参数函数
- C方式实现C++纯虚函数
- 虚函数的实现方式
- strlen函数C语言版的几种实现方式
- 【C++】【学习笔记】/*函数声明的四种方式*/
- Android学习笔记<一>监听器的实现方式
- 第二周项目一 C/C++语言中函数参数函数传递的三种方式
- C语言常用字符串函数的实现一
- 常见字符串函数的模拟实现(一)(c语言)
- 【C++】函数的传递方式
- 【c和指针学习笔记】函数指针的初始化以及函数调用的三种方式
- 消息函数的实现方式
- swap函数的实现方式
- C语言队列的实现--学习组合设计(一)
- 数据结构学习(一)字符串截取的C语言实现
- 第一周 项目一C/C++语言中函数参数传递的三种方式
- 第二周项目一c语言中函数参数传递的三种方式
- django-rest-framework Bulk operations
- Linux GCC常用命令
- Android App 评价/跳转到应用市场
- 很全很强大国内值得关注的官方API集合(太幸福啦)
- 《JS高程(3)》DOM扩展-API选择符-第11章笔记(18)
- C++学习一虚函数的实现方式
- 文章标题
- easyui datagrid load 参数表单序列化
- Key Concepts (Mastering CMake)
- springmvc--ResponseStatus注解处理异常
- 【Bzoj1083】繁忙的都市
- nil与null的区别
- 学习Hibernate_04_Hibernate参数设置一览表
- 微信H5video视频问题