1

最良の答えはすでにここで与えられていると思います:派生クラスのオーバーライドされた関数は、基本クラスの他のオーバーロードを隠すのはなぜですか?

しかし、特にステートメントで、私は少し混乱しています:

この動作をオーバーライドするには、明示的なアクションがユーザーに必要です。元は継承されたメソッドの再宣言 (現在は非推奨) でしたが、現在は 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 つの質問があります。

  1. 派生クラスオブジェクトに関して、int f(int i)関数はまったく存在しないと思いますか。名前が隠されているため、これは継承されません。

  2. この関数を派生クラスで使用する必要がある場合は、派生クラスで再度定義する必要がありますか?

4

1 に答える 1