社区
C语言
帖子详情
各位,有谁愿意进来谈谈对虚拟函数的理解的~~讲的越详细,给的分越多~~~
caoyun
2003-08-29 09:51:59
~~
...全文
31
10
打赏
收藏
各位,有谁愿意进来谈谈对虚拟函数的理解的~~讲的越详细,给的分越多~~~
~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
akiko
2003-08-30
打赏
举报
回复
pObject->vfunc();
单一继承时的情况简单一些,编译时虽然不知道具体哪个vfunc会被调用,但是知道这个vfunc的地址放在vtable的第几个slot中.
多重继承和虚拟继承则麻烦一些,还要根据实际的情况调整vptr,来决议使用哪一个vtable.
caoyun
2003-08-30
打赏
举报
回复
大家看看这个`~http://www.c-view.org/journal/001/cpp_critique.htm
jakeye
2003-08-30
打赏
举报
回复
学习ing
caoyun
2003-08-30
打赏
举报
回复
大家加油呀~~~下午结了哈`~~
谢谢大家`~~~`
chanet
2003-08-30
打赏
举报
回复
多态性的一种表现...
有自己的一套,不一定要与基类相同... 可重新来过...(从现在,非基类)
null2002
2003-08-30
打赏
举报
回复
真的是胡说八道,不是需要哪个就编译哪个,是一块编译,一块装入内存,到运行时才确定调用哪个。这就是所说的运行时的多态。
其实,虚函数就是提供了一个类的成员函数的接口,你可以对这个接口进行重载,根据需要使这个接口指向不同内存地址,就是说根据需要调用不同函数。
虚函数的实现机制是这样的:
如果一个类有一个虚函数,系统就为这个类创建一个虚函数表(就是楼上几位提到的vtable),这个虚函数表存放了虚函数的入口地址,到运行时根据你使用的类的指针来在不同的类的虚函数表中寻找所需要的虚函数的地址。
它与一般的重载的不同就是,一般的类成员函数的重载,调用哪个类的函数,看的是类指针的类型。而虚函数的重载中,调用哪个函数,看的是指针指向的是哪个类。这样就好记了。
昵称怎么改都存在
2003-08-29
打赏
举报
回复
其实我觉得虚函数的用途是充分利用机器的机能,需要哪个就编译哪个,暂时不需要就先不理.
caoyun
2003-08-29
打赏
举报
回复
各位,能给例子,结合例子谈,最好~~分不够的话我再给~~~明天下午结帖,希望大家顶住`~~
SmileWolf
2003-08-29
打赏
举报
回复
虚拟函数是C++多态性的实现方式。也就是说如果你把类的成员函数声明成了虚拟函数,那么,你就可以在程序里放心大胆的使用基类的指针,编译器会给你转换成相应的子类的函数调用。这中特性,在底层是靠虚函数表——VTABLE来实现的。
编译器只要一发现你的类声明中有函数用了virtual这个关键字,就会在这个类的开头或末尾(与具体编译器有关)加入一个指针——VPTR。这个指针就指向VTABLE的首地址。并把所有用virtual声明了的成员函数的地址都放入VTABLE中。
这个时候,当你调用一个成员函数时,就变成了顺着VPTR找到VTABLE,再调用相应的函数。这样就不会调错了。
oopig
2003-08-29
打赏
举报
回复
本质上就是通过函数指针进行函数调用,然后几个函数函数指针放在一起就成了vtable。
还有就是虚函数的调用时机问题,比如没有办法在基类的构造函数中调用子类重载的虚函数。
还有就是虚析构函数,需要通过基类指针释放子类对象的,基类的析构函数应该是虚拟的。
然后就是虚函数的应用,比如和模版结合起来,那就很丰富了。
MySQL 函数、用户自定义函数
Re: MySQL 函数、用户自定义函数 ============================== # MySQL 函数的意义 MySQL 自身提供大量功能强大、方便易用的函数。使用这些函数,可以极大地提高用户对数据库的管理效率。 # 函数的...
虚拟化技术
同时,随着计算机软件的发展,用户使用计算机的场合
越
来
越
多这又导致用户对计算机的要求
越
来
越
多,网络安全、数据灾备、系统移植、系统升级、软硬件成本等用计算机过程中要考虑和解决的问题。而虚拟化技术的出现与...
谈谈
我对nginx的一些
理解
NGINX是什么? ... 反向代理又是什么?和正向代理有什么区别呢?其实这两种代理方式主要区别是代理对象不同:正向代理代理对象是客户端;而反向代理代理对象是服务器。 NGINX可以做什么? 场景: ...
浅谈自己对vue代码优化的
理解
代码千万行,注释第一行,我写下这篇博客很大的原因是因为同事的代码没有注释,逼不得已只能重构代码,重构的同时考虑了性能的优化,话不多说,一起来看看如何优化你的代码吧。 1. 逻辑优化 怎么说呢,逻辑优化不是...
Vue 原
理解
析(四): 虚拟Dom是怎么生成的
在经过初始化阶段之后,即将开始组件的挂载,在挂载之前有必要了解下虚拟Dom 的概念。我们知道vue@2.0 开始引入了虚拟dom, 主要解决的问题是, 大部分情况下可以降低使用Javascript 去操作跨线程的庞大dom所需要的...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章