这个问题不明白,请指教!
#include "iostream.h"
class a
{
public:
virtual void s() {cout<<"a::s()\n\n";}
};
class b :public a
{
public:
int m_data1;
void func() {cout<<"b::func()"<<endl;
s();
}
virtual void s(){cout<<"b::s()\n\n";}
};
class c:public b
{
public:
int m_data2;
virtual void s(){cout<<"c::s()\n\n";}
};
void main()
{
c mydoc;
c *pmydoc=new c;
cout<<"#1 testing"<<endl;
mydoc.func();
cout<<"#2 testing"<<endl;
((b*)(&mydoc))->func();
cout<<"#3 testing"<<endl;
pmydoc->func();
cout<<"#4 testing"<<endl;
((b)mydoc).func();
}
该执行的结果为:
#1 testing
b::func()
c::s()
#2 testing
b::func()
c::s()
#3 testing
b::func()
c::s()
#4 testing
b::func()
b::s() --->>注意,问题来了!因为派生类已经修改了虚拟函数s(),那么理当调用派生类的s(),但是到了第四项测试时为什么变成了是调用b类的s()呢?请帮帮小弟!!!