関数のオーバーライドが基本クラスでオーバーロードされた関数を非表示にする理由を具体的に教えてください。
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;
}
関数のオーバーライドが基本クラスでオーバーロードされた関数を非表示にする理由を具体的に教えてください。
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 が言語を作成したときに、これがより良いデフォルトであると考えただけです。(これは、右辺値が非 const 参照に暗黙的にバインドされないという規則に似ています。)
基本クラスのバージョンを派生クラスのスコープに明示的に持ち込むことで、簡単に回避できます。
class Base {
public:
void fun(int,int);
void fun(Base);
};
class Derived : public Base {
public:
using Base::fun;
void fun();
};
ベースのオーバーロードされたメソッドが派生クラスに隠されている理由を説明しているため、WHY リンクも参照してください。