免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1196 | 回复: 3
打印 上一主题 下一主题

[C++] 请问c++的虚函数表:虚函数表能一样嘛 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-24 00:44 |只看该作者 |倒序浏览
2个子类的虚函数表可能一样嘛?
比如:
下面的Dog和Cat类,应该说他们的虚函数表都是Pet::foo()啊,因为他们自己都没有覆
盖重新写foo函数,所以虚函数表是不是一样??
可是下面dynamic_cast起作用了。dynamic_cast不是从vTABLE中得到信息的嘛,可是这
里2个子类都没有定义自己的虚函数啊,都是继承父类的虚函数,应该分不出来才对啊。
  
也即:
1:这2个子类,Cat,Dog的虚函数表是一样的嘛?
2:如果这2个子类的虚函数表一样,那么dynamic_cast怎么知道基类指针指的是哪个子类
对象啊。
  
请指教。
谢谢。
#include <iostream>;
using namespace std;
class Pet { public:  ~Pet(){}
virtual void foo(){}
#include <iostream>;
using namespace std;
class Pet { public:  ~Pet(){}
virtual void foo(){}
};
class Dog : public Pet {};
class Cat : public Pet {};
int main() {
  Pet* b = new Cat; // Upcast
  // Try to cast it to Dog*:
  Dog* d1 = dynamic_cast<Dog*>;(b);
  // Try to cast it to Cat*:
  Cat* d2 = dynamic_cast<Cat*>;(b);
  cout << "d1 = " << (long)d1 << endl;
  cout << "d2 = " << (long)d2 << endl;
} ///:~

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
2 [报告]
发表于 2004-12-24 13:09 |只看该作者

请问c++的虚函数表:虚函数表能一样嘛

1 与具体的c++实现模型有关。不同的C++实现可能不一样。
2 Dog* d1 = dynamic_cast<Dog*>;(b);可能不会成功。虚函数表里面除了foo之外还有一个vtype域,指明类型信息。

论坛徽章:
0
3 [报告]
发表于 2004-12-24 17:09 |只看该作者

请问c++的虚函数表:虚函数表能一样嘛

你说虚函数表中还有个vtype域啊,嘿嘿,这样就明白了,原来如此。非常感谢啊。
不过,请问这个vtype再在那本书上见的啊。the c++ programming, c++ prime?

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
4 [报告]
发表于 2004-12-24 18:10 |只看该作者

请问c++的虚函数表:虚函数表能一样嘛

SL的 http://jjhou.csdn.net/jjtbooks-inside-cpp-obj-model-gb.htm
或者
BS 的《C++ Annotation》
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP