为什么函数重写隐藏函数在基类中重载

时间:2012-08-08 14:09:21

标签: overloading

请给我一个具体的答案,为什么函数重写会隐藏在基类中重载的函数。

class Base{
public:
  fun(int,int);
  fun(B);
};
class Derived:public Base
{
public:
fun();
};

int main()
{
Derived d;
d.fun(1,2); // error
return 0;
}

1 个答案:

答案 0 :(得分:3)

TTBOMK这没有真正的技术原因,只是Stroustrup在创建语言时认为这是更好的默认设置。 (在此,它类似于rvalues不会隐式绑定到非const引用的规则。)

您可以轻松解决这个问题,将基类版本显式引入派生类的范围:

class Base {
public:
  void fun(int,int);
  void fun(Base);
};

class Derived : public Base {
public:
  using Base::fun;
  void fun();
};

同时参考WHY链接,因为它告诉了为什么基本重载方法隐藏在派生类中:WHY