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



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

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;
}

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

您可以通过显式将基类版本引入派生类的范围来轻松解决此问题:

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

另请参阅 WHY 链接,因为它说明了为什么 base 重载方法隐藏在派生类中:WHY。

最新更新