-3

3 つの .cpp ファイルと 2 つのヘッダー ファイルがあるとします。

1 番目のファイル:

それはmain.cppで、すべての関数とものを呼び出します。2 つのヘッダー ファイルが含まれています。


2 番目のファイル:

次の 2 つの関数が含まれています。

int print(int num2, int num1)

int update(int num1)

3 番目のファイル:

次の 3 つの機能が含まれています。

int calculate(int num2, int num3, int num4)

int update(int num2, char random)

int divied(int all)

++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++

2番目と3番目のファイルには同じ名前の関数「int update」が1つありますが、一方には1つのパラメーターがあり、もう一方には2つのパラメーターがあることがわかります。

好きな人に電話できますか?コンパイル エラーは発生しますか? 図書館のコンピューターを使用しているため、今はテストできません。

4

4 に答える 4

5

技術的には、そうです。異なる署名を持つ関数はオーバーロード セットを形成し、呼び出し時に、渡された実際のパラメーターの数と型を照合することによって適切な関数が選択されます。

OTOH そのような名前をグローバル名前空間に置くのはひどい習慣です。これは偶然の出来事です。誰かがタイプミスによって意図しない関数を呼び出します。

実際のオーバーロード セットはランダムに形成されるのではなく、設計によって形成されます。これは、異なる種類の弾薬を使用するだけで、同じセマンティクスを持つ関数です。それらは連携して機能することを意図しており、「どちらが呼び出されたか」に対する答えが「気にしない」である場合に最適に機能します。コンパイラが選択するものは何でも適切な仕事をします。

于 2013-06-01T18:16:22.043 に答える
0

はい、それは関数のオーバーロードと呼ばれます。実際、同じファイルで機能します。関数が同じパラメーターを取らないことを確認してください。そうしないと、コンパイラーがそれらを区別できなくなります。

于 2013-06-01T18:15:21.590 に答える
0

名前は C++ でマングルされるため、これらの関数に異なるパラメーターを指定できます。TGhe コンパイラーは、パラメーターに基づいてそれらの名前を作成します。

そのため、同じクラスに次のようなものを含めることができます。

foo(int a);
foo(int a, int b);
foo(std:string s),
etc. ...

そして、これは通常の機能にも当てはまります。

于 2013-06-01T18:11:41.017 に答える
0

はい、これは C++ では許容され、関数のオーバーロードと呼ばれます。The C++ Language Standard の C13 p1 から

過負荷

同じスコープ内の 1 つの名前に対して 2 つ以上の異なる宣言が指定されている場合、その名前はオーバーロードされていると言われます。拡張により、同じスコープ内で同じ名前を宣言するが型が異なる 2 つの宣言は、オーバーロードされた宣言と呼ばれます。オーバーロードできるのは、関数関数テンプレートの宣言のみです。変数と型の宣言はオーバーロードできません。

正しいパラメータで関数を呼び出す限り、コンパイラは正しい関数を使用します。

于 2013-06-01T18:12:55.993 に答える