求助:关于虚函数的一点疑惑(想了很久,没辙了)。。。
#include <iostream>
using namespace std;
class B
{
public:
B()
{
cout << "B::B()" << endl;
}
virtual ~B()
{
cout << "B::~B()" << endl;
}
virtual void vfunc()
{
cout << "B::vfunc~" << endl;
}
};
class D : public B
{
public:
D()
{
cout << "D::D()" << endl;
};
virtual ~D()
{
cout << "D::~D()" << endl;
}
virtual void vfunc(int a)
{
cout << "D::vfunc(a) = " << a << endl;
}
};
int main()
{
D d;
B *pb = &d;
pb->vfunc(5);//error!(1)
pb->vfunc();
d.vfunc(6);
d.vfunc();//error!! (2)
return 0;
}
第一个错的地方:不是说虚函数是动态绑定的么?现在pb的动态类型不是D了么。。此处应该可以编译的通啊?
第二个错的地方:这里我觉得是在derived scope中vfunc(int) HIDE 了 base scope 中的vfunc(), 这样可以理解的通。请问下:如果从对象模型的上来说,不是派生类没有override基类的virtual func 的话其vtabl 中的指针就会指向基类的这个虚函数的吗?那为啥该语句有问题呢?
向各位请教了。。。。