通过被赋了派生类地址的基类指针调用类中的虚函数,怎么还是调用了基类的函数?
#include <iostream>
using namespace std;
class A
{
public:
virtual void out(int)
{
cout<<"A int"<<endl;
}
void out(double)
{
cout<<"A double"<<endl;
}
};
class B: public A
{
public:
void out(int)
{
cout<<"B int"<<endl;
}
};
void main()
{
B b;
A *pA = &b;
pA->out(1.0);
}
程序输出:
A double
怎么回事,这个不是首先到派生类中找,派生类中是有一个out,但是这个out不是已经把基类中的给out屏蔽了吗? 虚函数
[解决办法]
不会屏蔽的!
因为强转的基类对象,虽然是子类地址!但是基类中 out(double) 是静态地址的!
[解决办法]
B的虚表里面有两个函数
一个是B:out(int)
另一个是A:out(double)
[解决办法]