静态多态性的歧义

时间:2015-09-18 15:14:57

标签: c++ polymorphism

实际上这是一个简单的问题,但其中一个问题很烦人,我无法找到合适的答案。

对于以下代码,函数调用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();
}

1 个答案:

答案 0 :(得分:1)

这称为&#34;名称隐藏&#34;在C ++中。实质上,如果一个类定义了一个函数,它会隐藏父类中具有相同名称的所有函数。另外值得注意的是,如果您对派生对象有Base_*并调用该函数,它将调用基类版本,因为它不是虚拟的,并且不会尝试在派生类中查找覆盖的实现。