虚函数和重载函数
class B
{
public:
virtual void func1(){
cout<<"class B :: func1()"<<endl;
}
};
class D : public B
{
public:
void func1(char){
cout<<"class D :: func1()"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
D* d = new D;
d->func1();//error
return 0;
}
如上代码,在编译的时候,在d->func1()报错,说D::func1()不接受0参数
有点疑惑,D的虚函数表中不是有func1()吗?!!!
如果把D* d = new D;改成B* d = new D;就没错误了
或者在D的定义中把void func1(char)这个函数去掉,也没错误了
高人指点一下,在编译器内部是如何处理,才会有这个结果的