最良の答えはすでにここで与えられていると思います:派生クラスのオーバーライドされた関数は、基本クラスの他のオーバーロードを隠すのはなぜですか?
しかし、特にステートメントで、私は少し混乱しています:
この動作をオーバーライドするには、明示的なアクションがユーザーに必要です。元は継承されたメソッドの再宣言 (現在は非推奨) でしたが、現在は using-declaration を明示的に使用しています。
次のプログラムがあるとします。
#include <iostream>
using namespace std;
class Base
{
public:
int f(int i)
{
cout << "f(int): ";
return i+3;
}
};
class Derived : public Base
{
public:
double f(double d)
{
cout << "f(double): ";
return d+3.3;
}
};
int main()
{
Derived* dp = new Derived;
cout << dp->f(3) << '\n';
cout << dp->f(3.3) << '\n';
delete dp;
return 0;
}
2 つの質問があります。
派生クラスオブジェクトに関して、
int f(int i)
関数はまったく存在しないと思いますか。名前が隠されているため、これは継承されません。この関数を派生クラスで使用する必要がある場合は、派生クラスで再度定義する必要がありますか?