CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

在派生类中增加新的虚函数

楼主magicblue(小飞侠)2001-05-01 13:23:00 在 C/C++ / C语言 提问

请讲讲为什么编译器防止对只在派生类中存在的函数做虚函数调用 问题点数:50、回复次数:8Top

1 楼lj9852(Loading)回复于 2001-05-01 14:50:00 得分 20

在派生类中,各个虚函数在vtable中的位置跟基类的vtable是一样的,编译器在vtable中是通过  
  偏移地址来选择虚函数的,不论对象属于哪个特殊的类,对虚函数的调用总是使用相同的方法,比  
  如基类中只有一个虚函数,那它就是编译器唯一允许调用的。通过基类指针调用虚函数时,编译器  
  要通过vtable才知道自己将要对哪个对象进行操作,如果在其派生类中再声明一个虚函数,就会  
  引起该派生类的vtable和基类的不一致,可能会产生调用混乱。如果一定要调用该子类中的函数,  
  则必须显式地指明。  
  浅薄见解,请高手指正Top

2 楼cnss(飞碟)回复于 2001-05-01 20:54:00 得分 0

听课Top

3 楼Nicrosoft(奈软)回复于 2001-05-01 20:56:00 得分 0

长见识Top

4 楼cber(cber)回复于 2001-05-01 21:02:00 得分 25

好问题,这个问题的答案不是一时半会能讲完的。反正你只要记住一件事,那就是千万不要在派生类中随意地引入虚函数。如果引入的话,请千万不要在多态中用这个派生类的父类指针来对这个虚函数进行调用。因为在进行function   call   resolution时会通不过的。  
  C++在进行function   call   resolution时只考虑函数的可见性,不考虑运行时到底调用哪个函数实体,这个动作是在运行时决定的,实现的机制就是vtable,这就是所谓的动态绑定的由来。  
  如果要想知道更多,可以看一看inside   c++   object   model,要么写mail给我,具体的情况写起来比较多,我以后再详细叙述。Top

5 楼magicblue(小飞侠)回复于 2001-05-01 21:52:00 得分 0

这是不是可以说是VTABLE的映射问题,这种向下映射是不安全的。  
  谢谢各位的回复Top

6 楼lj9852(Loading)回复于 2001-05-01 22:18:00 得分 0

to   cber(cber):如果可能的话还麻烦你对虚函数和多态作些总结,我代表菜鸟谢了先!Top

7 楼oliverluoy(大飞)回复于 2001-05-01 22:42:00 得分 0

对于多态的编程不利!!!!Top

8 楼Nicrosoft(奈软)回复于 2001-05-01 22:52:00 得分 5

虚函数可以参考:http://www.csdn.net/expert/topic/110/110307.shtmTop

相关问题

  • 关于派生类中建立虚函数的疑问
  • 如何让派生类必须重载一个虚函数
  • 派生类的V表中包不包括不从基类继承的虚函数,也就是派生类有而基类没有的虚函数??
  • 怪事,派生类必须全部重定义基类同名虚函数?
  • 析构时怎么才能调到派生类里重载的虚函数?
  • 基类有个虚函数,在派生类中被覆盖,虚函数的参数有缺省值,但是在基类中和派生类中不同,那么一个指向派生类对象的基类指针在调用这个虚函数
  • 派生类的拷贝构造函数
  • 派生类函数重载的问题
  • 关于派生类的构造函数
  • [虚拟函数派生下去仍为虚拟函数,而且可以省略virtual关键词。]我有些不解,后半句是否指派生类中的重定义函数可以不加virtual关键词?

关键词

  • c++
  • 编译器
  • 函数
  • 虚函数
  • 调用
  • 派生类
  • vtable
  • 类
  • 问题
  • 就是

得分解答快速导航

  • 帖主:magicblue
  • lj9852
  • cber
  • Nicrosoft

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo