这本书里谈到虚函数,于是我就想更深入了解一下虚函数,看到一篇文章,转载在我博客,网址
http://hi.baidu.com/slqhappy/blog/item/996ee3465f4668006a63e56e.html
因为虚函数表在类的头部,所以可以通过获取一个类的实例的地址得到这张虚函数表的地址,而虚函数表里放的又是本实例对象的虚函数的地址。这里问一个问题,是否一个类的所有实例都有不同的虚函数表,但我看到有关文章说的是所有类的实例共享本类的虚函数表,那请问一个虚函数表如何能得到不同的虚函数地址?
还有就是指针的问题,部分源码如下:
#include <iostream>
using namespace std;
class Base
{
public:
virtual void f()
{
cout<<"Base::f"<<endl;
}
virtual void g()
{
cout<<"Base::g"<<endl;
}
virtual void h()
{
cout<<"Base::h"<<endl;
}
};
typedef void(*Fun)(void);
void main()
{
Base b;
Fun pFun = NULL;
cout<<"虚函数表地址"<<(int*)(&b)<<endl; //
这里我明白是实例地址
cout<<""<<(int*)*(int*)(&b)<<endl;//这里的每一步是什么意思?
pFun = (Fun)((int*)*(int*)(&b));//这里的每一步是什么意思?
fFun();
}
另外,该代码可在VC2003中通过,但VC2005中不能将 int 转化为 int*错误
请DX赐教,两个问题:
现重复如下
1 是否一个类的所有实例都有不同的虚函数表,但我看到有关文章说的是所有类的实例共享本类的虚函数表,那请问一个虚函数表如何能得到不同的虚函数地址?
2 上面代码中指针转换的意思.
谢谢了 !