【C/C++】ハイライトC++の関数の書き換え——関数名は同じですか?パラメータリストは同じですか?戻り値は同じですか?

2091 ワード


C++のリロードは、リロードの条件が注意に値するため、関数名が同じで、パラメータリストが異なる2つの関数がリロード関数を構成し、両者の戻り値に関係しないため、非常に深刻な影響を及ぼしています.
しかし、C++の関数の書き換えはまた別のことです.標準:関数名が同じであれば書き換えられます.書き換えた後、子クラスで継承されるべき親の関数にアクセスすると、親クラスにどのような同名の関数があるかに関係なく、子クラスの同名の関数が呼び出されます(つまり、存在しない場合).例:
 
#include <iostream>

using namespace std;



class A

{

    public:

    int func()

    {

        return 1;

    }

};



class B: public A

{

    public:

    char func(int a)

    {

        return '2';

    }

};



main()

{

    B b;

    cout <<b.func()<<endl;

    cout <<b.func(1)<<endl;

}

上記のコードでは、main関数のb.func(1)が正常に呼び出され、b.func()がエラーを報告します.
Untitled1.cpp|25|error: no matching function for call to 'B::func()'|

このとき親から統合されたint func()は書き換えられているため,パラメータリストが異なる場合でも戻り値が異なる.int func()はサブクラスBには既に存在しない.