1、当继承类没有重载基类定义的虚函数时
#include
class A
{
public:
virtual void f()
{
cout<<"class A"<
};
class B:public A{};
int main()
{
A *pa=new A;
int *paadd=(int*)(*(int*)pa);
int *paaddr=(int*)(*(int*)paadd);
cout<
int *pbadd=(int*)(*(int*)pb);
int *pbaddr=(int*)(*(int*)pbadd);
cout<
delete pb;
return 0
}
输出确实一样,都为0x00401028(注:不同的机器上地址可能不同)
2、当继承类重载了基类定义的虚函数时
#include
{
public:
virtual void f()
{
cout<<"class A"<
};
class B:public A
{
public:
virtual void f()
{
cout<<"class B"<
};
int main()
{
A *pa=new A;
cout<
int *paaddr=(int*)(*(int*)paadd);
cout<
int *pbadd=(int*)(*(int*)pb);
int *pbaddr=(int*)(*(int*)pbadd);
cout<
delete pb;
return 0;
}
这时,基类的虚函数的地址为:0x00401028,而继承类的虚函数地址为:0x00401032