首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有关虚函数调用执行的有关问题,请问

2012-08-03 
有关虚函数调用执行的问题,请教!没有仔细搜过帖子,可能我表述能力不好,百度不到想要的答案,只好在此求救。

有关虚函数调用执行的问题,请教!
没有仔细搜过帖子,可能我表述能力不好,百度不到想要的答案,只好在此求救。先在此谢谢了!
  问题描述:最近在公司写一个程序,在调试时发现一个问题,调用一个函数时执行逐语句调试时跳到的竟然不是该函数的实现体,而是一个其他文件里的函数!查了一下该函数对应类的虚函数表,发现该函数在虚表里的本来的位置被一个其他函数给占据了(就是调试时跳转的那个函数)!水平实在汗颜,只能在此向各位求助!
  由于是公司程序,有做加密,而且代码不小,所以无法拷贝出来贴上给各位查看,实在抱歉!另通过基类指针调用的那个虚函数在子类中是否重写都测过,结果都是一样。看起来好像就是虚表里的函数地址被其他覆盖重写了,但是该函数在虚表中的位置是在中间的,前面后面的都是OK的,为什么唯独这里会被重写呢?

[解决办法]
这种问题,木有代码还真不太好说。帮顶
[解决办法]
虚函数的调用,是根据指针对象来判断,实际还是看指针的指向的对象。

可以使用 tpyeid 查看对象。下面是一个例子:

C/C++ code
#include <iostream>#include <typeinfo.h>class Base {public:    virtual void vvfunc() {}};class Derived : public Base {};using namespace std;int main() {    Derived* pd = new Derived;    Base* pb = pd;    cout << typeid( pb ).name() << endl;   //prints "class Base *"    cout << typeid( *pb ).name() << endl;   //prints "class Derived"    cout << typeid( pd ).name() << endl;   //prints "class Derived *"    cout << typeid( *pd ).name() << endl;   //prints "class Derived"    delete pd;    getchar();    return 0;}
[解决办法]
用VC6里我也遇到过会跳转错误的时候

热点排行