实际上这是一个简单的问题,但其中一个问题很烦人,我无法找到合适的答案。
对于以下代码,函数调用d.show();
如何不明确?为什么在b->show();
之后b = &d;
导致调用Base_::show()
?
#include <iostream>
using std::cout;
class Base_
{
public:
void show()
{
cout<<"\nBase Show";
}
};
class Derived_ : public Base_
{
public:
void show()
{
cout<<"Derived Show"<<endl;
}
};
int main()
{
Base_ b;
Derived_ d;
b->show();
d.show();
}
答案 0 :(得分:1)
这称为&#34;名称隐藏&#34;在C ++中。实质上,如果一个类定义了一个函数,它会隐藏父类中具有相同名称的所有函数。另外值得注意的是,如果您对派生对象有Base_*
并调用该函数,它将调用基类版本,因为它不是虚拟的,并且不会尝试在派生类中查找覆盖的实现。